GOF的23种设计模式与六大原则详解

需积分: 10 1 下载量 123 浏览量 更新于2024-09-02 收藏 22KB DOCX 举报
"本文主要介绍了GOF的23种设计模式和设计模式的六大原则,GOF是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者共同编写的经典著作《设计模式——可复用面向对象软件的基础》的简称。这23种设计模式是软件开发中经常使用的模式,旨在提高代码的可重用性、可维护性和可扩展性。" 在设计模式的六大原则中,每一个都是面向对象设计的基础: 1. **单一职责原则** (Single Responsibility Principle, SRP):一个类应该只有一个引起它变化的原因,意味着每个类应该有一个明确的职责,并且这个职责仅由该类来完成。 2. **开闭原则** (Open-Closed Principle, OCP):软件实体(类、模块、函数等)应该是对扩展开放的,但对修改关闭。这意味着当需要扩展功能时,应通过添加新代码而不是修改已有代码来实现。 3. **里氏替换原则** (Liskov Substitution Principle, LSP):子类型必须能够替换它们的基类型,而不影响程序的正确性。这意味着子类可以自由地增加新的行为,但不应破坏原有基类的行为约定。 4. **接口隔离原则** (Interface Segregation Principle, ISP):不应强迫客户端依赖它们不需要的方法,应当将相关的接口方法组合在一起,形成更小、更具体的接口。 5. **依赖倒置原则** (Dependency Inversion Principle, DIP):高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。这有助于降低耦合并提高模块间的灵活性。 6. **迪米特法则** (Law of Demeter, LoD):也称为最少知识原则,一个对象应当尽量少地了解其他对象的内部细节,只与直接的朋友交流。这有助于减少类之间的耦合,提高系统的可维护性。 接下来是23种设计模式的简要介绍: 1. **单例模式** 保证一个类只有一个实例,并提供全局访问点。 2. **原型模式** 通过复制已有对象创建新对象,避免重复的初始化过程。 3. **工厂方法模式** 提供一个接口用于创建对象,具体创建哪种对象由子类决定。 4. **抽象工厂模式** 创建一系列相关或相互依赖的对象,而无需指定它们的具体类。 5. **建造者模式** 将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 6. **代理模式** 在对象前设置一个代理以控制对原对象的访问。 7. **适配器模式** 将一个类的接口转换为客户期望的另一个接口,使得原本不兼容的类可以协同工作。 8. **桥接模式** 分离抽象和实现,使得它们可以独立变化,降低耦合。 9. **装饰模式** 动态地给对象添加新的行为或责任。 10. **外观模式** 提供一个统一的接口,简化对复杂系统子系统的访问。 11. **享元模式** 使用共享技术高效地支持大量细粒度对象的复用。 12. **组合模式** 将对象组织成树形结构,允许用户对单个对象和整个组合进行一致的操作。 13. **模板方法模式** 在抽象类中定义操作的框架,具体步骤由子类实现。 14. **命令模式** 将请求封装为一个对象,以便使用不同的请求、队列请求、或者支持可撤销的操作。 15. **责任链模式** 定义处理请求的对象链,请求沿链传递,直到某个对象处理它。 16. **解释器模式** 提供一个语言的文法表示,并定义一个解释器来解释这个文法中的句子。 17. **访问者模式** 允许在不改变对象结构的情况下,为对象添加新的操作。 18. **状态模式** 允许对象在其内部状态改变时改变其行为。 19. **策略模式** 定义一系列算法,并将每个算法封装起来,使它们可以互相替换。 20. **备忘录模式** 保存对象的状态,以便在需要时恢复。 21. **迭代器模式** 提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 22. **组合模式** 类似于组合模式,但更侧重于表示层次结构中的叶子节点和分支节点。 23. **观察者模式** 定义对象间的一对多依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。 这23种设计模式是软件工程中的宝贵工具,它们提供了解决常见问题的标准方案,帮助开发者编写更加灵活、可维护和可扩展的代码。在实际项目中,根据需求灵活应用这些模式,可以使软件架构更加健壮和易于管理。