模板方法模式和策略模式
1、模板方法和策略模式都有封装算法。
2、策略模式是使不同算法可以相互替换,且不影响客户端应用层的使用。
3、模板方法是针对定义一个算法的流程,将一些有细微差异的部分交给子类实现。
4、模板方法模式不能改变算法流程,策略模式可以改变算法流程且可替换。策略模式通常用来代替 if...else...等条件分支语句。
模板方法模式和工厂方法模式
1.工厂方法是模板方法的一种特殊实现。
2.对于工厂方法模式方法而言,相当于只有一个步骤的模板方法模式。这一个步骤交给子类去实现。
而模板方法,将定义好的方法交给子类实现,同时定义好的方法又属于父类的某一个步骤且不可变更。
策略模式和委派模式
1、策略模式是委派模式内部的一种实现形式,策略模式关注的结果是否能相互替代。
2、委派模式更关注分发和调度的过程。
策略模式和工厂模式
1、工厂模式包含工厂方法模式和抽象工厂模式是创建型模式,策略模式属于行为型模式。
2、工厂模式主要目的是封装好创建逻辑(new),策略模式接收工厂创建好的对象,从而实现不同的行为(invoke)。
单例模式和工厂模式
实际业务代码中,通常会把工厂类设计为单例。
装饰者模式和静态代理模式
1、装饰者模式关注点在于给对象动态添加方法(is-a关系),而代理更加注重控制对对象的访问(has-a关系)。
2、代理模式通常会在代理类中创建被代理对象的实例,而装饰者模式通常把被装饰者作为构造参数。
装饰者模式和适配器模式
1、装饰者模式和适配器模式都是属于包装器模式(Wrapper Pattern)。
2、装饰者模式是一种非常特别的适配器模式 ,适配器模式没有层级关系,装饰器模式有层级关系
3、装饰者模式:装饰者和被装饰者都实现同一个接口,主要目的是为了扩展之后依旧保留 OOP 关系
适配器模式:适配器和被适配者没有必然的联系,通常是采用继承或代理的形式进行包装
4、装饰者模式注重覆盖、扩展 ,适配器模式注重兼容、转换
5、装饰者模式从设计的角度来讲是前置考虑,而适配器模式是后置考虑
适配器模式和静态代理模式
适配器可以结合静态代理来实现,保存被适配对象的引用,但不是唯一的实现方式。
适配器模式和策略模式
在适配业务复杂的情况下,利用策略模式优化动态适配逻辑。
具体代表性的架构就是把设计模式用的淋漓尽致,例如Spring、Mybatis
Spring中常用到的设计模式
工厂模式(只对结果负责,封装创建过程):BeanFactory、Calendar
单例模式(保证独一无二,不会重复出现):ApplicationContext、Calendar
原型模式(以一个对象为原型复制千万个一样的):ArrayList、PrototypeBean
代理模式(找人办事,增强职责):ProxyFactoryBean、JdkDynamicAopProxy、CglibAopProxy
委派模式(自己不干活,他任务交给他人完成,只收集结果,功劳算我的):DispatcherServlet、BeanDefinitionParserDelegate
策略模式(用户多种选择,但是结果都是一样的):InstantiationStrategy
模版模式(流程已经标准化了,可以实现自己的定制):JdbcTemplate、HttpServlet
适配器模式(主要是兼容已有的产品):AdvisorAdapter、HandlerAdapter
装饰器模式(主要在在已有的产品上锦上添花):OutputSteam
、InputStream、BufferedReader
观察者模式(任务完成时通知):ContextLoaderListener
Mybaits中用到的设计模式
工厂模式:SqlSessionFactory、ObjectFactory、MapperProxyFactory
建造者模式:XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder
单例模式:SqlSessionFactory、Configuration、ErrorContext
代理模式:MapperProxy、ProxyFactory(CGLIB、JAVASSIT)、Plugin、SqlSessionInterceptor、PooledConnector、ConnectionLogger、StatementLogger
适配器模式:logging
模版方法模式:BaseExecutor、SimpleExecutor、BatchExecutor、ReuseExecutor
装饰器模式:PerpetualCache、Executor
责任链模式:InterceptorChain
网友评论