内容都是从Tom老师的书中摘抄,记录下来方便自己学习。
分类 | 设计模式 |
---|---|
创建型 | 工厂方法模式、抽象工厂模式、建造者模式、原型模型、单例模型 |
结构型 | 适配器模型、桥接模型、组合模型、装饰者模型、门面模型、享元模型、代理模型 |
创建型 | 解释器模式、模板方法模式、责任链模式、命令模式、迭代器模式、调节者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式 |
1、装饰者模式和适配器模式比对
两者都是包装模式,装饰者模式也是一种特殊的代理模式,两者比对如下表:
2、设计模式之间的关联关系
-
单例模式和工厂模式:在实际业务中,通常会把工厂类设计为单例模式
-
策略模式和工厂模式:
(1)工厂模式保护工厂方法模式和抽象工厂模式,是创建型;策略模式属于行为型模式;
(2) 工厂模式的主要目的是封装好创建逻辑,策略模式接收工厂创建好的对象,从而实现不同的行为。 -
策略模式和委派模式
(1)策略模式是委派模式内部的一种实现方式,策略模式关注结果是否能相互替换;
(2) 委派模式更关注分发和调度的过程。 -
模板方法模式和工厂方法模式
工厂方法模式是模板方法模式的一种特殊实现。 -
模板方法模式和策略模式
(1)模板方法模式和策略模式都有封装算法;
(2) 策略模式使不同算法可以相互替换,且不影响客户端应用层的使用;
(3)模板方法模式针对定义一个算法的流程,将一些有细微差异的部分交给子类实现;
(4)模板方法模式不能改变算法流程,策略模式可以改变算法流程且可替换。策略模式通常用来代理if…else等条件分支语句。 -
装饰者模式和代理模式
(1) 装饰者模式的关注点在于给对象动态的添加方法,而代理模式更加注重控制对象的访问;
(2) 代理模式通常会在代理类中创建被代理对象的实例,而装饰者模式通常会把被装饰者作为构造参数。 -
装饰者模式和适配器模式
(1)装饰者模式和适配器模式都属于包装器模式;
(2)装饰者模式可以实现与被装饰者相同的接口,或者继承被装饰者作为它的子类,而适配器和被适配者可以实现不同的接口。 -
适配器模式和静态代理模式
适配器模式可以结合静态代理模式来实现,保存被适配对象的引用,但不是唯一的实现方式。 -
适配器模式和策略模式
在业务复杂的情况下,可利用策略模式优化适配器模式。
Spring 常用的设计模式:
设计模式 | 一句话归纳 | 举例 |
---|---|---|
工厂模式 | 只对结果负责,封装创建过程 | BeanFactory、Calender |
单例模式 | 保证独一无二 | ApplicationContext、Calender |
原型模式 | ArrayList、PrototyBean | |
代理模式 | ProxyFactoryBean、JdkDynamicAopProxy、CglibAopProxy | |
委派模式 | DispatcherServlet、BeanDefinitionPaserDelegate | |
策略模式 | 用户选择、结果统一 | InstantiationStrategy |
模板模式 | 流程标准化,自己实现定制 | JdbcTemplate、HttpServlet |
适配器模式 | 兼容转换头 | AdvisorAdapter、HandlerAdapter |
装饰者模式 | 包装,同宗同源 | BufferedReader、InputStream、OutputStream、HttpHeadResponseDecorator |
观察者模式 | 在任务完成时通知 | ContextLoaderListener |