设计模式笔记资源
基本原则
单一职责原则 / Single Responsibility Principle
一个类只负责一项职责。
开闭原则Open Closed Principle
对扩展开放,对修改关闭。解决方法:抽象化。
里氏代换原则 Liskov Substitution Principle
任何基类可以出现的地方,子类也可以出现。子类可以扩展父类的功能,但不能改变父类原有的功能。例子:正方形和长方形。
依赖倒转原则 Dependency Inversion Principle
高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。抽象接口不应该依赖于具体实现。而具体实现则应该依赖于抽象接口。解决方法:不要依赖模块,改为依赖接口,而模块去实现接口。
接口隔离原则 Interface Segregation Principle
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。解决方法:把臃肿的接口拆分成独立的几个接口。
合成/聚合复用 Composite/Aggregate Reuse Principle
尽量使用合成/聚合,尽量不要使用类继承
- 只有“Is-A”关系才符合继承关系,“Has-A”关系应当用聚合来描述。
- 永远不会出现需要将子类换成另外一个类的子类的情况。如果不能肯定将来是否会变成另外一个子类的话,就不要使用继承。
- 如果一个子类需要大量的置换掉超类的行为,那么这个类就不应该是这个超类的子类。
- 只有在分类学角度上有意义时,才可以使用继承。不要从工具类继承。
最少知识原则 Principle of Least Knowledge一个对象应该对其他对象保持最少的了解。
解决方法:两个类之间不要直接通信,可以通过第三方转发。(解耦)
创建型
创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。[/url]
- 简单工厂 Simple Factory 【学习难度:★★☆☆☆,使用频率:★★★☆☆】
- 工厂方法 Factory Method 【学习难度:★★☆☆☆,使用频率:★★★★★】
- 抽象工厂 Abstract Factory 【学习难度:★★★★☆,使用频率:★★★★★】
- 单例 Singleton 【学习难度:★☆☆☆☆,使用频率:★★★★☆】
- 建造者 Builder 【学习难度:★★★★☆,使用频率:★★☆☆☆】
- 原型 Prototype 【学习难度:★★★☆☆,使用频率:★★★☆☆】
结构型
结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。
- 适配器 Adapter 【学习难度:★★☆☆☆,使用频率:★★★★☆】
- 桥接 Bridge 【学习难度:★★★☆☆,使用频率:★★★☆☆】
- 组合 Composite 【学习难度:★★★☆☆,使用频率:★★★★☆】
- 装饰 Decorator 【学习难度:★★★☆☆,使用频率:★★★☆☆】
- 外观 Facade 【学习难度:★☆☆☆☆,使用频率:★★★★★】
- 享元 Flyweight 【学习难度:★★★★☆,使用频率:★☆☆☆☆】
- 【袋里】 Proxy 【学习难度:★★★☆☆,使用频率:★★★★☆】
行为型
行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。
通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。
- 职责链 Chain of Responsibility 【学习难度:★★★☆☆,使用频率:★★☆☆☆】
- 命令 Command 【学习难度:★★★☆☆,使用频率:★★★★☆】
- 解释器 Interpreter 【学习难度:★★★★★,使用频率:★☆☆☆☆】
- 迭代器 Iterator 【学习难度:★★★☆☆,使用频率:★★★★★】
- 中介者 Mediator 【学习难度:★★★☆☆,使用频率:★★☆☆☆】
- 备忘录 Memento 【学习难度:★★☆☆☆,使用频率:★★☆☆☆】
- 观察者 Observer 【学习难度:★★★☆☆,使用频率:★★★★★】
- 状态 State 【学习难度:★★★☆☆,使用频率:★★★☆☆】
- 策略 Strategy 【学习难度:★☆☆☆☆,使用频率:★★★★☆】
- 模板方法 Template Method 【学习难度:★★☆☆☆,使用频率:★★★☆☆】
- 访问者 Visitor 【学习难度:★★★★☆,使用频率:★☆☆☆☆】
评论