前言:
我这篇文章更多的是自己的一些思考,如果想快速入门还是尽早阅读经
典书籍为妙。
个人理解:
设计模式属于是程序设计的思想,是大量实践中总结出来的。学习设计模式首先是先知道有这么一种精巧的设计,然后一定要理解为什么这么设计,最后最重要的就是要在项目中去运用,用具体的场景切实体会到它的好处。
简单工厂模式、工厂模式、抽象工厂模式
工厂模式隐藏了创建对象的具体细节和复杂过程。
简单工厂模式会包含条件判断。调用者实现相对简单,但是可维护性不好,业务一旦有新的条件,需要修改原有代码。
工厂模式让调用者实现条件判断。对于扩展是开放的,对于修改是封闭的。
抽象工厂模式的方法返回的是抽象工厂,而不是具体的实例类。
对于抽象工厂的根抽象类 IFactory ,书籍介绍可以用反射+配置文件的形式进行优化,但我觉着实际使用某些场景可能不太灵活。理解原理,灵活运用才好。
策略模式
针对某一具体行为的不同场景有不同的算法。核心思想还是封装变化、依赖倒置。
装饰模式
为类已有的功能添加新的功能,或者是把类的核心功能和装饰功能分开
核心类:Component,ConcreteComponent,ConcreteComponentA,Decorator,DecoratorA
代理模式
隐藏真实的实现类,还可以额外添加一些功能。JAVA 通过反射可以实现动态代理。
代理模式与装饰模式的区别
代理,偏重因自己无法完成或自己无需关心,需要他人干涉事件流程,更多的是对对象的控制。
装饰,偏重对原对象功能的扩展,扩展后的对象仍是是对象本身
原型模式
由一个对象 clone 出很多其他对象的模式。JAVA 中 有 clonable 接口,实现很方便。
要注意浅拷贝和深拷贝的影响。
模板模式
将大量重复性的东西封装在父类,子类分别实现不同的部分。根本思想还是封装变化。
外观模式
为复杂的子系统提供统一的接口,很好的体现了迪米特原则。
建造者模式
对象的创建可被有序的分割为多个部分,不同 Builder 的实现不同,Director 控制实现顺序。感觉应该是很复杂的系统才会适用,像 Android 中的 AlertDialogBuilder 都严格算是,但我觉着 AlertDialogBuilder 设计的很好。。。
观察者模式
UI 界面的改变用的比较多。注意面向接口编程。
状态模式
案例:学生分数、state1 state2
适配器模式
类结构适配器模式、对象适配模式、双向适配模式
备忘录模式
主要角色:Originator 、Mementor 、Caretaker
组合模式
例子角色:Component 、LeafComponent、CompositeComponent
优点:对客户端提供统一的接口
迭代器模式
就是自己实现一个单独的迭代器类。。。
单例模式
普通模式、双重锁模式、饿汉式
桥接模式
桥接模式通过组合关系的方式替代继承关系。
桥接模式通常适用于以下场景。
当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。
命令模式
解耦了请求的发起者和执行者。
主要角色:Receiver、Command、Invoker
命令模式中的命令还可以结合组合模式
职责链模式
有多个对象可以处理请求,并且有一定顺序的时候。











网友评论