设计模式解析:创建型、结构型与行为型模式探讨
4星 · 超过85%的资源 需积分: 9 167 浏览量
更新于2024-09-15
收藏 65KB DOCX 举报
"设计模式读书笔记"
设计模式是软件开发中的重要概念,它们代表了解决常见问题的最佳实践和模板。设计模式共有23种,主要分为三大类:创建型、结构型和行为型。这些模式根据其作用和涉及的对象类型可以进一步细分为类模式和对象模式。
创建型设计模式关注对象的创建过程,包括:
1. 抽象工厂(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。
2. 工厂方法(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法让类的实例化推迟到子类。
3. 建造者(Builder):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
4. 原型(Prototype):用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
5. 单例(Singleton):确保一个类只有一个实例,并提供一个全局访问点。
结构型设计模式涉及类和对象的组合及结构,包括:
1. 适配器(Adapter):将两个不兼容的接口转换为可一起工作的接口。
2. 桥接(Bridge):将抽象部分与实现部分分离,使它们可以独立变化。
3. 组合(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。
4. 装饰(Decorator):动态地给一个对象添加一些额外的职责,装饰类和被装饰类有相同的接口。
5. 外观(Façade):为子系统提供一个统一的接口,使得子系统更容易使用。
6. 飞行重量(Flyweight):减少内存中对象的数量,通过共享大量细粒度对象来支持大量对象。
7. 代理(Proxy):为其他对象提供一种代理以控制对这个对象的访问。
行为型设计模式关注对象之间的交互和职责分配,包括:
1. 责任链(Chain of Responsibility):避免将请求的发送者和接收者耦合在一起,多个对象都有可能处理请求。
2. 命令(Command):将请求封装为一个对象,以便于使用不同的请求、队列请求或参数化命令。
3. 解释器(Interpreter):给定一种语言,定义它的文法表示,并提供一个解释器来处理这种语言中的句子。
4. 迭代器(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。
5. 中介者(Mediator):定义对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
6. 记忆体(Memento):保存对象的内部状态,以便在需要的时候恢复它。
7. 观察者(Observer):定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖于它的对象都会得到通知。
8. 状态(State):允许一个对象在其内部状态改变时改变它的行为。
9. 策略(Strategy):定义一系列算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立于使用算法的客户。
10. 模板方法(Template Method):在一个方法中定义一个算法的框架,允许子类重新定义该算法的某些步骤。
11. 访问者(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变元素的类的前提下定义作用于这些元素的新操作。
在状态模式中,对象的行为取决于它的状态。例如,TCPConnection类可以根据其当前连接状态(如已建立、监听、关闭等)来改变其行为。通过引入一个状态抽象类(如TCPState),TCPConnection对象可以持有这个状态对象,并将与特定状态相关的操作委托给状态对象实现。这种方式使得TCPConnection类的行为可以根据状态对象的变化而变化,提高了代码的灵活性和可维护性。
理解并熟练运用设计模式对于提升软件设计质量、可读性和可扩展性至关重要。设计模式的应用不仅限于面向对象编程,也可以应用于函数式编程和其他编程范式。通过学习和实践设计模式,开发者可以更好地应对各种软件设计挑战,实现更高效、灵活和可复用的代码。
2024-01-29 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
mengyi711
- 粉丝: 1
- 资源: 37
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章