首页 > 代码库 > 设计模式总结
设计模式总结
UML类图:
- - - - ->依赖关系 指向被依赖的类
--------- :继承关系,指向被继承的类
- - - - - - ---:实现接口
------->:聚合关系,聚合关系是一种弱拥有,箭头指向被拥有的
------->:组合关系,组合是一种强拥有,箭头指向被拥有的
----------->关联关系:指向被关联的类
1.开闭原则:对扩展开放,对修改封闭。有利于代码的维护和重用
2.简单工厂模式:
工厂:获得抽象产品的实体
抽象产品
具体产品
通过工厂模式获得相应的具体产品
3.工厂方法模式
抽象工厂
具体工厂
抽象产品
具体产品
工厂方式是对简单工厂方式的抽象,当出现树型结构的对象,可将兄弟节点放在一个简单工厂中,父节点们是一个个具体工厂
4.单例模式
单例模式是类将构造器私有化后,通过静态方法返回一个类的实例
单例模式分为饿汉模式和懒汉模式:饿汉模式是在类加载的时候就进行初始化,懒汉模式对类进行了延迟加载
单例模式可能出现问题的情况:多个虚拟机,多个类加载器,可序列化(readResolve使用枚举类型)
5.建造者模式
客户端
建造者模式将产品的建造由外部的自由选择放到了内部进行实现,这样产品的生成就是可控的,并且用户不需要知道产品的生产细节。
一个指导者,根据具体的构造类来生产产品,将产品的构造细节封装到构造类当中。
6.原型模式
原型模式是通过将原型传递给原型管理器,然后获取到原型的克隆,如:给客户端一本书,客户端通过原型管理器复印了一本书。
7.适配器模式
适配器模式适用于要使用的产品不符合当前的接口,因此通过适配器模式对产品进行适配,适配器模式一般应用于后期维护,将两个本不是同个接口的类进行适配,或者对第三方提供的进行适配,不适合在开发中使用,如开发中遇到此问题应该考虑对抽象进行重构
8.装饰模式
装饰模式可通过递归方式对原对象进行包装。
9.代理模式
抽象主题角色
代理主题角色
具体主题角色
代理通过集成了抽象主题角色,然后通过包含了一个具体主题角色,通过代理模式操作具体主角角色
一个比较形象的代理模式是:显示网页,当网页中的图片还未传输完毕的时候,代理模式先显示文字。
10.模板模式
模板模式通过将框架搭建好,然后内部具体的算法可通过子类的继承的方式来实现具体的算法实现。
形象的例子就是一份考卷,题目就是模板模式的框架,每个考生就是每个子类,具体答卷的答案就是子类的具体算法的实现。
11.观察者模式
单一职责原则:一个类只负责某一块的内容,这样有利于代码的维护。
观察者模式应用于:当一个对象改变,其他对象相应要做出改变,观察者不需要知道通知者是谁,这样两个相互耦合的对象便有依赖于两个抽象对象,实现了控制反转。
12.策略模式
策略模式和模板模式的区别:策略模式是将完整的一个算法作为接口暴露出来,只要实现这个接口,传入至上下文环境中就可以完成。而模板模式则是将一部分算法给子类进行继承,在继承的过程中实现具体的部分,模板模式是作为整体来看。
策略模式可以通过依赖注入的方式进行。
策略模式和模板模式对于开放的部分的掌控力不同
策略模式的接口一定是公有的,外界可以随意调用
模板模式则不同,模板模式可以让外界不能单独访问预留的算法。
(趋向于接口和抽象类的优缺点)
13.外观模式
Dao<----service
14.状态模式
状态模式用于解决类似于if else 这样的结构判断的形式。
状态模式可根据给定状态, 进行状态转移,获得正确的状态。
15.备忘录模式
将要维护的信息保存到备忘录中,然后由备忘录管理者来管理备忘录。
16.组合模式
用树型结构完成实际结构
对于组合模式中的leaf和composite的表示方式有两种,一是都继承component,然后对于leaf,限制其add和remove方法,二是让compsite单独拥有add和remove方法。
第一种称为透明方式,第二种称为安全模式
17.桥接模式?
控制反转---依赖注入思想
本来两个相互依赖的类,转换成对抽象的依赖,变成了松耦合
18.命令模式
命令模式客户端将请求者的命令传给命令角色,命令角色将命令记录下来,然后传输给接收者,接收者对执行命令
与门面模式的区别,门面模式是将一些需求进行组合封装。
命令模式是记录一系列命令,然后交给接收者,可产生不同的组合。
19.责任链模式
抽象责任类:包含一个抽象责任类
具体责任类
当当前责任类无法完成请求,则抛给包含的责任类,进行传递。
和状态模式的区别
状态模式只是改变其类所拥有的状态,不负责具体的操作。
责任链模式则负责具体的操作。
20享元模式
String的设计实现
21.解释器模式
正则表达式
设计模式总结