• 设计模式之间的对比


    第一、设计模式之间的关联关系和对比

    1.1单例模式和工厂模式

    实际业务代码中,通常会把工厂类设计为单例。

    1.2策略模式和工厂模式

    1.工厂模式包含工厂方法模式和抽象工厂模式是创建型模式,策略模式属于行为型模式。

    2.工厂模式主要目的是封装好创建逻辑,策略模式接收工厂创建好的对象,从而实现不同的行为。

    1.3策略模式和委派模式

    1、策略模式是委派模式内部的一种实现形式,策略模式关注的结果是否能相互替代。

    2、委派模式更关注分发和调度的过程。

    模板方法模式和工厂方法模式工厂方法是模板方法的一种特殊实现。

            工厂方法模式                                                       模板方法模式

    对于工厂方法模式的 create()方法而言,相当于只有一个步骤的模板方法模式。这一个步骤交给子类去实现。而模板方法呢,

    将 needHomework()方法和 checkHomework()方法交给子类实现,needHomework()方法和 checkHomework()方法又属于父类的某一个步骤且不可变更。

    1.4模板方法和策略模式

    1、模板方法和策略模式都有封装算法。

    2、策略模式是使不同算法可以相互替换,且不影响客户端应用层的使用。

    3、模板方法是针对定义一个算法的流程,将一些有细微差异的部分交给子类实现。

    4、模板方法模式不能改变算法流程,策略模式可以改变算法流程且可替换。策略模式通常用来代替 if...else...等条件分支语句。

     策略模式                                                              模板方法

    1、WechatPay、JDPay、AliPay 是交给用户选择且相互替代解决方案。而 JdbcTemplate 下面的子类是不能相互代替的。

    2策略模式中的 queryBalance()方法虽然在 pay()方法中也有调用,但是这个逻辑只是出于程序健壮性考虑。

    用户完全可以自主调用 queryBalance()方法。而模板方法模式中的 mapRow()方法一定要在获得 ResultSet 之后方可调用,否则没有意义。

    1.5装饰者模式和静态代理模式

    1、装饰者模式关注点在于给对象动态添加方法,而代理更加注重控制对对象的访问。 2、代理模式通常会在代理类中创建被代理对象的实例,

    而装饰者模式通常把被装饰者作为构造参数。

    代理模式      装饰者模式装饰者和代理者虽然都持有对方引用,但逻辑处理重心是不一样的。

    1.6装饰者模式和适配器模式

    1、装饰者模式和适配器模式都是属于包装器模式(Wrapper Pattern)。

    2、装饰者模式可以实现被装饰者与相同的接口或者继承被装饰者作为它的子类,而适配器和被适配者可以实现不同的接口。

     适配器                                                                  装饰者模式

    装饰者和适配器都是对 SiginService 的包装和扩展,属于装饰器模式的实现形式。但是装饰者需要满足 OOP 的 is-a 关系,

    不管如何包装都有共同的父类。而适配器主要解决兼容问题,不一定要统一父类,上图中 LoginAdapter 和

    RegistAdapter 就是兼容不同功能的两个类,但 RegistForQQAdapter 需要注册后自动登录,因此既继承了 RegistAdpter 又继承了 LoginAdapter。

    设计模式

    一句话归纳

    举例

    工厂模式(Factory)

    只对结果负责,封装创建过程。

    BeanFactory、Calender

    单例模式(Singleton)

    保证独一无二。

    ApplicationContext、Calender

    原型模式(Prototype)

    拔一根猴毛,吹出千万个。

    ArrayList、PrototypeBean

    代理模式(Proxy)

    找人办事,增强职责。

    ProxyFactoryBean、

    JdkDynamicAopProxy、CglibAopProxy

    委派模式(Delegate)

    干活算你的(普通员工),功劳算我的(项目经理)。

    DispatcherServlet、

    BeanDefinitionParserDelegate

    策略模式(Strategy)

    用户选择,结果统一。

    InstantiationStrategy

    模板模式(Template)

    流程标准化,自己实现定制。

    JdbcTemplate、HttpServlet

    适配器模式(Adapter)

    兼容转换头。

    AdvisorAdapter、HandlerAdapter

    装饰器模式(Decorator)

    包装,同宗同源。

    BufferedReader、InputStream、

     

     

    OutputStream、

    HttpHeadResponseDecorator

    观察者模式(Observer)

    任务完成时通知。

    ContextLoaderListener

     

     

  • 相关阅读:
    服务器扫描工具
    Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:443
    [warn] _default_ VirtualHost overlap on port 443, the first has precedence
    Apache环境下配置多个站点的SSL证书
    Linux漏洞扫描工具
    详细解读html中的Map,area标签
    Linux操作系统加固
    MySQL服务安全加固
    redis cluster管理工具redis-trib.rb详解
    Java中使用Jedis操作Redis
  • 原文地址:https://www.cnblogs.com/cxyyh/p/11456510.html
Copyright © 2020-2023  润新知