收获

五月初定下的计划,每天学习一个设计模式。现在完美收官了。23种设计模式,很巧妙,我觉得对我以后的开发有着深远的影响。深刻学习了可复用,可替换等灵活 的思想。面向对象的编程模式就是易于维护,方便修改。这个思想已经深入脑海了。

总结

Iterator-迭代器模式:一个一个遍历:

一个一个的从容器中取出元素,java有自带的Iterator

Adapter-适配器模式:加个“适配器”以便于复用

将两个没法直接关联在一起的东西,通过适配器联系再一起。220v的用电器不能直接插在380v的插口上,需要电源适配器。

Template Method-模板模式:将具体交给子类

父类知道实现什么,子类知道怎么具体实现。用镂空的模具来进行绘画,可以使用粉笔画,可以使用铅笔画。

Factory Method-工厂模式:将实例的生成交给子类

产品不是直接生成,而是由工厂类加工。工厂加工时可以进行给产品注册等 操作。

Singleton-单例模式:只有一个实例

将构造函数私有化,静态的方式生成一个当前类,通过方法来获得唯一的一个实例。

Prototype-原型模式:通过复制生成实例

实例不方便通过new出来的时候,就可以复制出来。java要进行clone操作要实现cloneable。clone克隆 分为深克隆和浅克隆,浅克隆顾名思义浅层的克隆,比如对象中有数组,只会克隆数组的引用,而不是真正的生成一个新的数组。深克隆就是会新建一个数组,对当前对象的数组操作不会影响原型对象数组。

Builder-建造者模式:组装复杂的实例

将复杂的问题,分解成小问题,再将小问题进行组合。盖楼的时候,一层一层盖组成了大楼。

Strategy-策略模式:整体替换算法

军队行军打仗,可以使用各种阵法。指挥者可以自由让军队变换阵法,而不是一个军队只会一个阵法。

Composite-组合模式:容器与内容的一致性

文件夹里可以装文件,也可以装文件夹。文件和文件夹实现同一个接口,这样文件夹就可以自己添加自己了。

Decorator-装饰模式:装饰边框与被装饰物的一致性

蛋糕加上奶油变成了奶油蛋糕,但还是蛋糕,奶油蛋糕加上了巧克力变成了巧克力奶油蛋糕,但还是蛋糕。可以无限被装饰。

Visitor-访问者模式:访问数据结构并处理数据

对象接受访问,委托访问者调用访问方法,将数据结构和处理数据分离开。与Strategy相似,有时访问者所访问的数据结构会使用Composite模式。

Chain of Resposibility-责任链模式:推卸责任

处理类接到请求时,自己先尝试做,如果做不了将会交个下一个处理类做,以此类推。我觉得和switch case相似。

Facade-外观模式:简单窗口

面对一大堆复杂的借口,将这些复杂的借口整合在一起完成工作,程序员只需面对一个窗口进行编程。前人栽树后人乘凉的设计模式。

Mediator-仲裁者模式:只有一个仲裁者

小组成员只知道自己做什么事,不用知道什么时候做,统一交给组长来处理逻辑。组员之间不通信,只和组长通信。

Observer-观察者模式:发送状态变化通知

说是观察者模式,更像是接受者模式。当对象发生改变通知给观察者,观察者作出处理。

Memento-备忘录模式:保存对象状态

我更喜欢叫存档模式,就像玩游戏一样,在自己状态最好的时候,或者Boss门口的时候存档,打不过再读档。

State-状态模式:用类表示状态

状态是个抽象类,什么具体状态做什么事。而不是判断当前是什么状态,而做什么动作。

Flyweight-轻量模式:共享对象,避免浪费

生产实例之前,先检查下之前有没有生成过,如果有直接使用,没有再生成。减少系统资源的浪费。

Proxy-代理模式:只在必要时生产实例

生产一个对象的代理对象,代理对象可以替该对象完成一些事情,如果这个事情代理对象完成不了,迫不得已生产该对象。

Command-命令模式:命令也是类

将一些列时间按顺序插入到队列中,再依次执行。

Interpreter-解释器模式:语法规则也是类

像是研发一门新的编程语言。没有深入学习。