全面解析:设计模式三大类别——创建型、结构型与行为型
创作时间:
作者:
@小白创作中心
全面解析:设计模式三大类别——创建型、结构型与行为型
引用
CSDN
1.
https://blog.csdn.net/u012347650/article/details/145125341
设计模式是软件工程中的重要概念,它提供了一套在特定上下文中解决常见问题的通用方案。本文将全面解析设计模式的三大类别:创建型模式、结构型模式和行为型模式,帮助读者更好地理解和应用这些模式。
设计模式(Design Pattern)是一种面向对象编程思想,分为创建型模式、结构型模式与行为型模式三大类,提供在特定上下文中解决常见任务通用方案,旨在让程序(软件)具有更好特点,如降低耦合性、提高内聚性、增强可维护性、可扩展性、重用性和灵活性等。设计模式主要分为以下三种类型:
- 创建型模式:主要用于创建对象,提供灵活的方式来创建对象,将对象的创建与使用分离,提供了更高的灵活性和可维护性。常见的创建型模式包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式等。
- 结构型模式:主要用于解决对象之间组合关系、接口定义和实现等结构性问题。结构型模式关注对象之间的组合和关联关系,以及如何通过这些关系来构建更大的结构。常见的结构型模式包括外观模式、适配器模式、代理模式、装饰模式、桥接模式、组合模式、享元模式等。
- 行为型模式:主要用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务。行为型模式关注对象之间的通信和交互方式,以及如何有效地管理和组织对象的行为。常见的行为型模式包括模板方法模式、观察者模式、状态模式、策略模式、职责链模式、命令模式、访问者模式、调停者模式、备忘录模式、迭代器模式、解释器模式等。
一、创建型模式(Creational Patterns)
单例模式(Singleton Pattern)
- 定义:确保一个类只有一个实例,并提供一个全局访问点。
- 应用场景:配置管理器、连接池管理、日志记录器等。
- 优点:保证全局只有一个实例,节省内存;提供全局访问点,方便管理。
- 缺点:如果实例化过程复杂,可能会导致性能问题;难以并行化。
工厂模式(Factory Pattern)
- 定义:一种创建对象的模式,将对象的创建过程封装起来,使代码更加灵活和可维护。
- 分类:
- 简单工厂模式:一个工厂类根据输入参数返回不同的产品实例。
- 工厂方法模式:定义一个创建对象的接口,让子类决定实例化哪一个类。
- 抽象工厂模式:定义一个创建一系列相关或相互依赖对象的接口,而不必指定它们具体的类。
- 应用场景:对象创建过程复杂、需要灵活地添加新的产品类、需要创建一系列相关或相互依赖的对象。
- 优点:将对象的创建和使用分离,提高代码的可维护性和可扩展性;可以灵活地添加新的产品类。
- 缺点:增加了系统的复杂度;如果产品类层次结构复杂,实现起来比较困难。
抽象工厂模式(Abstract Factory)
- 定义:它提供一个接口,用于创建一组相关或相互依赖的对象,而无需指定具体类。该模式能创建多个等级的产品,是工厂方法模式的升级版。
- 应用场景:需要多种产品组合、强调产品系列一致性的系统。
- 优点:隔离具体类、提高系统灵活性和可扩展性。
- 缺点:增加新产品困难、代码复杂性增加。
建造者模式(Builder Pattern)
- 定义:将一个复杂对象的构建过程与其表示分离,使同样的构建过程可以创建不同的表示。
- 应用场景:创建对象的构建过程比较复杂,而且需要创建不同表示时。
- 优点:使构建过程更加清晰,易于理解和管理;可以创建复杂对象的不同表示。
- 缺点:增加了代码量,需要定义多个类。
原型模式(Prototype Pattern)
- 定义:通过复制原型对象的方式创建新对象,而无需知道其具体的实现细节。
- 应用场景:对象的创建过程比较复杂或者对象的初始化过程需要耗费大量时间。
- 优点:提高对象创建的性能;避免复杂对象的初始化过程。
- 缺点:需要维护一个原型对象集合,可能增加内存开销。
二、结构型模式(Structural Patterns)
适配器模式(Adapter Pattern)
- 定义:将一个类的接口转换成客户希望的另一个接口。
- 应用场景:需要使用一个已经存在的类,但其接口与系统中的其他接口不匹配时。
- 优点:使原本接口不兼容的类可以一起工作;提高了代码的复用性。
- 缺点:增加了代码复杂性,需要创建适配器类。
装饰器模式(Decorator Pattern)
- 定义:动态地给一个对象添加一些额外的职责。
- 应用场景:需要在不修改现有对象结构的情况下,动态地给对象添加功能。
- 优点:比生成子类方式更为灵活;可以动态地扩展对象的功能。
- 缺点:可能导致过多的装饰器层级,增加代码复杂性。
代理模式(Proxy Pattern)
- 定义:为另一个对象提供一个替身或占位符以控制对这个对象的访问。
- 应用场景:需要实现对象的延迟初始化、控制对对象的访问、实现日志记录等功能。
- 优点:控制对真实对象的访问;提高代码的安全性和灵活性。
- 缺点:增加了系统的复杂度;如果代理对象过多,可能导致性能问题。
外观模式(Facade Pattern)
- 定义:提供了一个统一的接口,用来访问子系统中的一群接口。
- 应用场景:需要简化复杂系统的接口并提供一个统一的入口点时。
- 优点:隐藏了子系统的复杂性;提供了一个简化的接口。
- 缺点:可能会违背单一职责原则,导致外观对象过于庞大。
桥接模式(Bridge Pattern)
- 定义:将抽象部分与实现部分分离,使它们可以独立变化。
- 应用场景:当一个类存在多个维度的变化时,可以使用桥接模式来将这些维度进行分离。
- 优点:提高了系统的灵活性和可扩展性。
- 缺点:增加了代码复杂性,需要定义多个类。
组合模式(Composite Pattern)
- 定义:将对象组合成树形结构以表示“部分-整体”的层次结构。
- 应用场景:需要表示对象的层次结构,并且希望客户统一处理单个对象和组合对象时。
- 优点:客户可以统一处理单个对象和组合对象;提高了代码的复用性。
- 缺点:限制了组合对象的类型,可能导致设计过度。
享元模式(Flyweight Pattern)
- 运用共享技术有效地支持大量细粒度的对象。
- 通过共享来减少对象的数量,从而提高性能。
三、行为型模式(Behavioral Patterns)
策略模式(Strategy Pattern)
- 定义:定义了一系列的算法,并将每一个算法封装起来,使它们可以互换。
- 应用场景:需要根据不同的条件选择不同的算法、算法需要经常变化或扩展、需要将算法的实现细节隐藏起来。
- 优点:算法和客户端分离,提高了代码的可维护性和可扩展性。
- 缺点:策略类的数量可能会增加,导致类的膨胀。
观察者模式(Observer Pattern)
- 定义:定义了对象之间的一对多依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
- 应用场景:事件监听机制、发布/订阅系统、GUI组件之间的交互。
- 优点:实现了主题和观察者之间的解耦;提高了代码的可维护性和可扩展性。
- 缺点:如果观察者数量过多,可能会导致性能问题。
命令模式(Command Pattern)
- 定义:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化。
- 应用场景:需要实现命令的封装和执行、实现命令的队列和撤销功能。
- 优点:实现了命令的封装和执行的分离;提高了代码的可维护性和可扩展性。
- 缺点:可能会导致类的数量增加,使系统变得复杂。
迭代器模式(Iterator Pattern)
- 定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
- 应用场景:需要遍历一个聚合对象,并且希望客户端代码与集合的具体实现解耦时。
- 优点:支持以不同的方式遍历聚合对象;提高了代码的复用性和灵活性。
- 缺点:需要实现迭代器接口,增加了代码复杂性。
中介者模式(Mediator Pattern)
- 定义:用一个中介对象来封装一系列的对象交互。
- 应用场景:多个对象之间存在复杂的交互关系,并且希望通过一个中介者来管理这些交互关系时。
- 优点:使对象之间的交互更加清晰和简单;降低了系统的复杂性。
- 缺点:增加了代码复杂性,中介者对象可能会变得庞大。
模板方法模式(Template Method Pattern)
- 定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。
- 应用场景:在父类中定义算法的框架,在子类中实现具体的步骤。
- 优点:定义了一个算法的框架,提高了代码的可复用性和可扩展性。
- 缺点:子类的扩展可能会影响算法的整体结构。
状态模式(State Pattern)
- 定义:允许对象在内部状态改变时改变它的行为。
- 应用场景:对象的行为随其内部状态的变化而变化时。
- 优点:将状态相关的行为封装在状态类中;提高了代码的可维护性和可读性。
- 缺点:增加了类的数量;状态类可能会变得复杂。
责任链模式(Chain of Responsibility Pattern)
- 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。
- 应用场景:有多个对象可以处理同一个请求,并且处理器之间的顺序可以灵活调整时。
- 优点:降低了请求的发送者和接收者之间的耦合度;提高了系统的灵活性。
- 缺点:可能导致请求的处理链过长,难以调试和定位错误。
访问者模式(Visitor Pattern)
- 定义:将数据结构和对数据的操作分离,使得可以在不改变数据结构的前提下定义新的操作。
- 应用场景:需要对一个复杂的对象结构中的不同元素执行不同的操作时。
- 优点:增加了新的操作很容易,无需修改已有的类;提高了代码的复用性和可扩展性。
- 缺点:需要在数据结构中添加访问者接受方法,增加了代码复杂性。
备忘录模式(Memento Pattern)
- 定义:在不破坏封装的前提下,捕获并保存对象的内部状态,以便后续恢复。
- 应用场景:需要保存和恢复对象的状态时。
解释器模式(Interpreter Pattern)
- 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
- 实现了特定语法规则的解释和执行。
综上所述,设计模式涵盖了创建型模式、结构型模式和行为型模式三大类,共包括23种具体的设计模式。每种设计模式都有其特定的应用场景和优缺点,开发者可以根据实际需求选择合适的设计模式来提高代码的可复用性、灵活性和可扩展性。
热门推荐
审判塔罗牌的寓意解析与法律启示
乾隆皇帝的“十全武功”:平定边疆叛乱与拓展国家版图
倒卖文物案件最新进展及其法律适用分析
《甄嬛传》中熹贵妃被诬告私通始末:第62集剧情深度解析
2025,全球经济在不确定性中找寻机遇(2025·跨年圆桌谈)
如何在国外正确安装空调?有哪些注意事项不可忽视?
人工智能的发展对文化产业有什么影响
阆中古城:中国第一风水古城的千年传奇
吴以岭院士:中医脉络学说为微血管病变防治打通“脉络”
股票筛选技巧:如何排除特定股票
鸣潮共鸣技能和共鸣解放是什么 鸣潮基础攻略
丽珠得乐的副作用和危害是什么
戴了角膜塑形镜,还需要一副备用框架眼镜吗?
全国地方专项计划院校名单大全!附2024年录取分数线(含低分推荐)
做自媒体一年的真实收入,自媒体一年能带来多少真实收入?
澳洲研究发现:78%的百岁老人生活在农村地区
养老金存款抵税每年可累加吗
16A插座的功率是多少瓦?
入职体检项目全解析:从血常规到胸部X光,这些检查你必须了解
中西饮食文化差异对比分析
智游港研学教育与学科知识的深度融合
教师资格认定需要什么材料
朱瞻基在艺术方面有何成就?有哪些与他相关的轶事典故?
银行承兑汇票的优势与劣势:法律视角下的深度剖析
银行的商业承兑汇票的风险评估与防范有哪些?
如何确定客厅电视柜的合适长度?
nm是什么单位?纳米技术在科技领域的应用
家里换这种盐,能降低卒中和心血管风险!
北斗卫星通讯终端是什么?有什么功能?
80年研究揭示:决定你幸福的,不是健康、财富或事业成就,而是这个