GOF的23种设计模式与六大原则详解
需积分: 10 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种设计模式是软件工程中的宝贵工具,它们提供了解决常见问题的标准方案,帮助开发者编写更加灵活、可维护和可扩展的代码。在实际项目中,根据需求灵活应用这些模式,可以使软件架构更加健壮和易于管理。
2009-03-31 上传
2009-03-11 上传
2008-10-06 上传
2015-09-05 上传
点击了解资源详情
点击了解资源详情
2012-10-09 上传
li_shyng
- 粉丝: 3
- 资源: 3
最新资源
- IEEE 14总线系统Simulink模型开发指南与案例研究
- STLinkV2.J16.S4固件更新与应用指南
- Java并发处理的实用示例分析
- Linux下简化部署与日志查看的Shell脚本工具
- Maven增量编译技术详解及应用示例
- MyEclipse 2021.5.24a最新版本发布
- Indore探索前端代码库使用指南与开发环境搭建
- 电子技术基础数字部分PPT课件第六版康华光
- MySQL 8.0.25版本可视化安装包详细介绍
- 易语言实现主流搜索引擎快速集成
- 使用asyncio-sse包装器实现服务器事件推送简易指南
- Java高级开发工程师面试要点总结
- R语言项目ClearningData-Proj1的数据处理
- VFP成本费用计算系统源码及论文全面解析
- Qt5与C++打造书籍管理系统教程
- React 应用入门:开发、测试及生产部署教程