23种设计模式总结

来源:互联网 发布:淘宝主营占比在哪里看 编辑:程序博客网 时间:2024/04/26 05:41


适合什么场景

状态 多种状态之间相互转换,影响行为。不想了解具体状态的转换。把状态变成对象。状态接口 。直接把一个初始化状态放到环境中

命令 想执行多个命令,但是不想了解命令的方法和内容。 把命令变成对象。命令接口。直接把命令扔进调用类中。

策略 有多个算法,不想了解算法的方法和内容。 算法变成对象。算法接口。直接把算法扔进环境类中。

门面 有多个子系统,不想了解子系统的方法和内容。 通过门面访问所有子系统。直接把子系统扔进门面中  医院门面咨询

观察 一方状态发生改变,通知其他多方。把多方抽取接口。直接把多方放到一方中。

桥梁 子类继承层次太多。抽象接口,抽象类,实现接口,实现类。实现接口放到抽象接口中。

中介 同事类相互影响。关系复杂。同事类都放到中介类中,相互访问

备忘 目标需要保留状态,随时撤销。 目标产生一个副本备忘录。可以通过备忘录恢复

装饰 通过装饰类,增加改变功能。 把被装饰类放到不同的装饰类中

享元 相似对象太多。内存太大。 单例

适配器 原类不符合目标类。适配器类继承原类实现目标类接口。

模板  多个业务流程骨架一样,细节不一样。骨架模板方法调用细节抽象方法,细节抽象方法子类不同实现。


责任  多个执行者,都有机会执行,自动判断那个执行。使用了模板方法,可以不使用。骨架方法,判断当前类是否符合要求,
         符合执行,当前类的细节抽象实现方法,
        不符合,调用下个执行类的骨架方法。
         执行类实现细节抽象方法,执行类持有下个执行类。一个执行,部分执行。全部执行


组合 树形结构,把分支和叶子都抽象成节点。分支可以增加分支和叶子。 文件夹 公司员工

迭代

访问  被访问者,传入访问者。访问者在调用被访问者

代理 隐藏被代理类。或者统一给被代理类增加功能和权限 。静态代理 动态代理

单例 服务器只有一个对象。减少内存。

工厂 创造实现了同一个接口的所有类的对象。

原型 克隆方法。深度拷贝 轻度拷贝

抽象工厂


建造 复杂对象的创造

解释






门面模式 : 通过门面类持有多个对象。门面类,其他类    AllDao  AllService  。
         
备忘录模式:  目标类,备忘录,备忘录管理类。多状态,多备忘录    撤销 事务

观察者模式:  观察者接口,观察者实现。观察者,被观察者    发布订阅

策略模式: 策略接口,策略实现,环境  换核不换皮,  算法


适配器模式:  通过适配器类 继承原对象类,加实现目标类接口。组合对象。继承接口 。目标类,原类,适配器类 3种  类适配器  对象适配器 接口适配器
           
装饰器模式:实现被装饰类的接口,并传入接口。被装饰者,装饰者 。换皮不换核 IO流
 
         
代理模式 :有点难 实现被代理类的接口,并持有代理类对象。客户端隐瞒对象   静态代理 动态代理

模板模式:有点难  模板抽象类,模板实现类。 模板类基类 的 模板方法调用抽象方法。子类实现各自的实现抽象方法。 jbpm流程
             
桥接模式:有点难  抽象接口,实现接口      2个维度子类相互影响扩展。 三层子类变2个2层子类  站内短信 短信 邮件  抽象角色 加急 特急

状态模式:有点难  状态接口,状态实现类。环境类,状态类   电梯

享元模式:有点难   单例 工厂   组合享元模式  string  池 字符a bc

命令模式:有点难   命令接口 命令实现 。调用者,接受者,命令    

中介者模式:有点难    中介类持有关系类。中介类调用关系类,所有关系类都访问中介类 中介类关系类   。销售 采购 仓库之间的关系。


责任链模式:难     struts  springmvc spring security  2种 FilterChain 递归  和  一个set Handler另一个Handler  

              基类 持有基类引用  链方法,链方法 判断调用抽象方法和子类 , 递归调用。子类持有下个子类,实现各自的实现抽象方法,

              基类 的 链方法 递归 调用(子类实现)抽象方法 。子类实现各自的实现抽象方法。
                       
              


组合模式:难  树形          xml 员工

迭代模式

访问者模式

解释器模式。



数据库种类 2*3=6

使用继承方式
      
父类                          数据库

继承儿子,抽象化数据库    加事务的数据库(事务方法)                          不加事务的数据库()

继承孙子,实例化数据库    mysql数据库  oracle数据库 db2数据库     mysql数据库  oracle数据库 db2数据库

扩展难



使用桥梁模式
      
父类                          抽象数据库(数据库引用)

继承儿子,抽象化数据库       加事务的数据库(事务方法)                      不加事务的数据库


父类                             数据库

继承子类,实例化数据库    mysql数据库  oracle数据库 db2数据库    
扩展难


增加一种sqlserver数据库,便增加了事务sqlserver 不加事务sqlserver数据库2种

增加一种自动提交事务数据库,便增加了mysql数据库  oracle数据库 db2数据库的自动提交事务数据库

0 0
原创粉丝点击