实际业务代码中,通常会把工厂类设计为单例。
1.工厂模式包含工厂方法模式和抽象工厂模式是创建型模式,策略模式属于行为型模式。
2.工厂模式主要目的是封装好创建逻辑,策略模式接收工厂创建好的对象,从而实现不同的行为。
1、策略模式是委派模式内部的一种实现形式,策略模式关注的结果是否能相互替代。
2、委派模式更关注分发和调度的过程。
模板方法模式和工厂方法模式工厂方法是模板方法的一种特殊实现。
工厂方法模式 模板方法模式
对于工厂方法模式的 create()方法而言,相当于只有一个步骤的模板方法模式。这一个步骤交给子类去实现。而模板方法呢,
将 needHomework()方法和 checkHomework()方法交给子类实现,needHomework()方法和 checkHomework()方法又属于父类的某一个步骤且不可变更。
1、模板方法和策略模式都有封装算法。
2、策略模式是使不同算法可以相互替换,且不影响客户端应用层的使用。
3、模板方法是针对定义一个算法的流程,将一些有细微差异的部分交给子类实现。
4、模板方法模式不能改变算法流程,策略模式可以改变算法流程且可替换。策略模式通常用来代替 if...else...等条件分支语句。
策略模式 模板方法
1、WechatPay、JDPay、AliPay 是交给用户选择且相互替代解决方案。而 JdbcTemplate 下面的子类是不能相互代替的。
2策略模式中的 queryBalance()方法虽然在 pay()方法中也有调用,但是这个逻辑只是出于程序健壮性考虑。
用户完全可以自主调用 queryBalance()方法。而模板方法模式中的 mapRow()方法一定要在获得 ResultSet 之后方可调用,否则没有意义。
1、装饰者模式关注点在于给对象动态添加方法,而代理更加注重控制对对象的访问。 2、代理模式通常会在代理类中创建被代理对象的实例,
而装饰者模式通常把被装饰者作为构造参数。
代理模式 装饰者模式装饰者和代理者虽然都持有对方引用,但逻辑处理重心是不一样的。
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 |
原文:https://www.cnblogs.com/cxyyh/p/11456510.html