好的设计应该——可复用性、可维护性、可扩展性。
设计模式——设计模式是在软件设计的特定语境下,针对常见问题的通用、可复用解决方案。
除了类本身,设计模式更强调多个类/对象之间的交互过程,复用的粒度更大。
创建型模式:涉及对象创建的过程。
结构型模式:处理类或对象之间的组合。
行为型模式:刻画类或对象交互及分配职责的方式。
对象该怎么创建才能更灵活,更容易扩展。
单例模式——保证一个类只有一个实例。
工厂方法模式——把“创建哪个对象”这件事交给工厂,而不是业务代码写死。
抽象工厂模式——创建一组有关联的对象,而不是只创建一个对象。
建造者模式——把复杂对象的构造过程拆开,一步一步构建。
原型模式——通过复制已有对象来创建新对象,而不是重新创建。
关注类和对象如何组合,才能形成更灵活、更可维护的结构。
将某个类/接口转换为client期望的其他形式——通过增加一个接口,将已存在的子类封装起来,client面对接口编程,从而隐藏具体子类。
将抽象部分与实现部分分离,使它们可以独立变化。
将对象组合成树形结构,以表示“部分-整体”的层次关系。
客户端可以一致地对待单个对象和组合对象。
在不改变原对象的前提下,动态地为对象添加额外功能。
为复杂子系统提供一个统一的高层接口,使其更容易使用。
通过共享技术有效支持大量细粒度对象。
为其他对象提供一种代理,以控制对这个对象的访问。
如何降低对象间耦合;切换逻辑实现方式;通知其他对象状态变化;规范流程步骤。
有多种不同算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里。
为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例。
当一个对象状态发生变化时,通知所有依赖它的对象。
做事情的步骤一样,但具体方法不同。
共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现。
将请求封装为对象,从而支持参数化、排队、撤销等操作。
允许对象在内部状态改变时改变其行为。
提供一种方法顺序访问聚合对象中的元素,而不暴漏其内部结构。
通过一个中介对象封装一组对象之间的交互。
在不破坏封装的前提下,保存对象的内部状态,并可恢复。
在不改变对象结构的前提下,定义新的操作。