Head First设计模式
设计原则
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
针对接口编程,而不是针对实现编程
多用组合,少用继承
为了交互对象之间的松耦合设计而努力
类应该对扩展开放,对修改封闭
要依赖抽象,不要依赖具体类
策略模式
定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。换一句话说,将应用中的某些行为进行一次分类,分别封装。也可以达到动态定义的作用。
这与python中的鸭子类型很相似。鸭子类型:通俗点说,你只要具有鸭子的行为与鸭子的外貌,那就可以说你是一只鸭子。在代码中的体现就是不管你这个变量是什么类型,是什么类,只要它实现了你要调用的方法,那么程序就可以正常运行。
观察者模式
定义了对象之间的一对多依赖,这样一来,当一个对象状态改变时,它的所有依赖者都会收到通知并自动更新。跟订阅-发布模型相似,亦或者这两种本就是相同的形式。
这样的一对多的依赖,也让我想到了vue中的数据绑定,还没有清楚这之间的关系。回头看一下vue的数据绑定是如何实现的。
装饰者模式
动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更具有弹性的替代方案。
装饰者模式与python中的装饰器很类似,倒不如说装饰器就是依靠装饰者模式的思想实现的。
工厂模式
定义了一个创建对象的接口,但由子类决定实例化的实例是哪一个工厂模式让类把实例化推迟到了子类。
暂更这些。。。