23种设计模式的应用场景详解
创作时间:
作者:
@小白创作中心
23种设计模式的应用场景详解
引用
1
来源
1.
https://docs.pingcode.com/ask/315244.html
设计模式是软件工程中的重要概念,它们提供了一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。本文将详细介绍23种设计模式及其应用场景,帮助读者更好地理解和应用这些模式。
设计模式是解决软件设计中常见问题的一套被反复使用的方法论,它们可以提高代码的可重用性、可读性和可维护性。23种设计模式分为三大类:创建型、结构型、行为型,各自的应用场景如下:
- 创建型模式主要关注如何创建对象,重点在于对象创建的过程;
- 结构型模式着重于类或对象的组合,它们帮助形成大型结构;
- 行为型模式专注于对象间的通信,提升灵活性和复用性。
以下部分将详细探讨每种设计模式及其适用场景:
一、创建型模式
工厂方法模式(FACTORY METHOD)
应用场景:
- 当一个类并不知道它所必须创建的对象的类时;
- 当一个类希望由其子类来指定创建的对象时;
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪个帮助子类是代理者这一信息局部化时。
抽象工厂模式(ABSTRACT FACTORY)
应用场景:
- 一个系统要独立于它的产品的创建、组合和表示时;
- 一个系统要由多个产品系列中的一个来配置时;
- 当你要强调一系列相关的产品对象的设计以便进行联合使用时;
- 提供一个产品类库的接口,但只希望暴露接口而不实现。
单例模式(SINGLETON)
应用场景:
- 当类只能有一个实例而且客户端可以从一个众所周知的访问点访问它时;
- 当这个唯一实例应该是通过子类化可扩展的,并且客户应能使用一个扩展的实例无需修改代码时。
建造者模式(BUILDER)
应用场景:
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;
- 当构造过程必须允许被构造的对象有不同表示时。
原型模式(PROTOTYPE)
应用场景:
- 当一个系统应该独立于它的产品创建、构成和表示时;
- 当要实例化的类是在运行时刻指定时,例如通过动态装载;
- 以及为了避免创建一个与产品类层次平行的工厂类层次时;
- 当一个类的实例只能有几个不同状态组合中的一种时。利用相应数目的原型可较好地利用这些状态.
二、结构型模式
适配器模式(ADAPTER)
应用场景:
- 希望使用一个已经存在的类,而它的接口不符合需求;
- 需要建立一个可重用的类,该类与不相关或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
- 需要使用几个现有的子类,但是不可能对每一个都进行子类化以匹配它们的接口。适配器可以适配它们的父类接口。
桥接模式(BRIDGE)
应用场景:
- 希望避免在抽象化和其实现化之间出现永久性的绑定;
- 类的抽象以及它的实现都应该通过生成子类的方式加以扩充。这样,抽象与实现间的扩展并不相互依赖;
- 在多个对象间分共享实现(可能使用引用计数),需要注意这一点。
组合模式(COMPOSITE)
应用场景:
- 希望客户端忽略组合对象与单个对象的差异时;
- 在一个组合结构的对象中,任何客户端都应该一致地对待组合结构中的所有对象。
装饰器模式(DECORATOR)
应用场景:
- 动态透明地给对象添加职责;
- 装饰对象的类是可以独立发展的,而由Mixin类概念得到强化;
- 扩展一个类的功能。
外观模式(FACADE)
应用场景:
- 当要为一个复杂子系统提供一个简单接口时;
- 客户程序与抽象类的实现部分之间存在着很大的依赖性;
- 当需要构建一个层次结构的子系统时,使用外观模式定义子系统中每层的入口点。
享元模式(FLYWEIGHT)
应用场景:
- 当一个应用程序使用大量的对象时;
- 对象的大多数状态可以外部化时,可以将这些对象设计为享元;
- 细粒度的对象频繁造成性能损失时;
- 一个应用程序不依赖于对象标识时。由于享元对象可以被多个外界对象共享,所以在享元模式中区分内在状态和外在状态是很重要的。
代理模式(PROXY)
应用场景:
- 一个对象不适合或者不能直接引用另一个对象时;
- 以及需要用一个中介对象作为其间的沟通桥梁。
三、行为型模式
责任链模式(CHAIN OF RESPONSIBILITY)
应用场景:
- 有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定;
- 你希望在不明确接收者的情况下,向多个对象中的一个提交一个请求;
- 可处理一个请求的对象集合应被动态指定。
命令模式(COMMAND)
应用场景:
- 当需要将请求调用者和请求接收者解耦时;
- 以及要将请求排队、记录请求日志,或支持可撤销操作时。
解释器模式(INTERPRETER)
应用场景:
- 当一个特定类型的问题发生频率足够高时,可以将该问题的各个实例表述为一个简单语言的句子;
- 当一个问题的语言较为简单,且可以使用类来表示语言的文法时;
- 以及当解释器的效率不是一个关键问题时。
迭代器模式(ITERATOR)
应用场景:
- 访问一个容器对象的内容而无需暴露它的内部细节;
- 支持对容器对象的多种遍历;
- 为遍历不同的容器结构提供一个统一的接口(即支持多态迭代)。
中介者模式(MEDIATOR)
应用场景:
- 一组对象以定义良好但复杂的方式进行通信;
- 产生的相互依赖性结构混乱且难以理解;
- 想定制一个分布在多个类中的行为,又不想生成太多的子类。
备忘录模式(MEMENTO)
应用场景:
- 必须保存一个对象在某一个时刻的(部分)状态,这样以后就可能(部分地)恢复到那个状态;
- 如果用一个接口来让其他对象得到这些状态将暴露这些对象的实现细节和打破对象的封装性。
观察者模式(OBSERVER)
应用场景:
- 当一个抽象模型有两方面,其中一方面依赖于另一方面时;
- 以及当需要在系统中加入手柄,使得用户可以不影响该系统就能够在其间添加新的"观察者"时。
状态模式(STATE)
应用场景:
- 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为;
- 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。
策略模式(STRATEGY)
应用场景:
- 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现;
- 需要配置一个类的算法或行为。
模板方法模式(TEMPLATE METHOD)
应用场景:
- 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现;
- 各子类中的公共行为应被提取出来并集中到一个公共父类中以避免代码重复。这是一种过程化抽象的典型应用;
- 控制子类的扩展。
访问者模式(VISITOR)
应用场景:
- 一个对象结构包括很多类对象,它们有不同的接口,但是想对这些对象实施一些依赖于其具体类的操作;
- 需要对一个复杂的对象结构,或者这个结构的一部分,应用多个虚拟操作。
设计模式是面向对象设计的精髓,正确的使用它们可以极大地提升软件工程的质量和开发效率。但应当注意,设计模式并不是万能的,盲目应用可能会过度设计,因此在使用时要结合实际情况谨慎选择。
相关问答FAQs:
1. 什么是设计模式?
设计模式是解决软件设计中常见问题的经验总结,它们提供了一种良好的解决方案,可用于各种应用场景。
2. 设计模式的分类有哪些?
设计模式可分为创建型模式、结构型模式和行为型模式。创建型模式涉及对象的实例化,结构型模式处理类和对象之间的组合,行为型模式处理对象之间的交互和职责分配。
3. 创建型模式中的应用场景有哪些?
- 单例模式:用于确保一个类只有一个实例,并提供全局访问点。
- 工厂方法模式:用于创建对象,但不在代码中明确指定要实例化的类。
- 抽象工厂模式:用于创建一组相关或依赖对象的工厂。
- 建造者模式:用于创建复杂对象的各个部分并将它们组装在一起。
- 原型模式:用于通过复制一个现有对象来创建新对象。
4. 结构型模式中的应用场景有哪些?
- 适配器模式:用于将一个类的接口转换成客户端所期望的另一个接口。
- 桥接模式:用于将抽象和实现解耦,使它们可以独立地进行变化。
- 组合模式:用于将对象组合成树状结构以表示"部分-整体"的层次关系。
- 装饰者模式:用于动态地给一个对象添加额外的职责。
- 外观模式:用于为一组复杂的子系统提供一个简单的接口。
5. 行为型模式中的应用场景有哪些?
- 观察者模式:用于在对象之间建立一种一对多的依赖关系,使得当一个对象状态发生变化时,所有依赖它的对象都会得到通知。
- 策略模式:用于定义一系列的算法,将每个算法都封装起来,使它们可以互相替换。
- 迭代器模式:用于提供一种方法来访问聚合对象的元素,而无需暴露其内部表示。
- 命令模式:用于将请求封装成对象,以便使用不同的请求、队列或日志来参数化其他对象。
- 状态模式:用于控制一个对象在其内部状态改变时改变其行为。
6. 以上只是设计模式的一部分,其他设计模式还有哪些应用场景?
还有模板方法模式、责任链模式、访问者模式、备忘录模式、解释器模式和中介者模式等。这些模式在各种应用场景中发挥重要作用,可以帮助开发者提高代码的可读性、可维护性和可扩展性。
热门推荐
盘锦红海滩国家风景廊道:从生态修复到文旅融合的5A级景区
怎样准确判断摩托车的油耗情况?降低摩托车油耗的方法有哪些?
3本治愈疲惫心灵的书籍:放下手机,用阅读通往自我疗愈
体育彩票与体育赛事的双赢结合:现状、影响与未来展望
超级大乐透24146期开奖:6注一等奖花落五省,追加投注最高获1719万
2024年度优质小说的“盛宴”:世界知名媒体推荐书单
陪你走出低谷,提升自我——10本值得一读的自我提升类书籍
乌兰布统草原:横跨蒙冀的草原明珠,四季美景各不同
冬至养生汤2024|8款滋补汤水及饮食注意事项
鱼缸造景入门指南:底沙、石头、水草选购与布置全解
火山石鱼缸底砂:兼具美观与生态功能的造景新选择
云南玉石全解析:种类、产地、特点及鉴赏指南
“彩色宝石卖爆了”!到底哪些算是彩色宝石?
揭秘翡翠市场:影响价格的关键因素与评估方法
鱼缸用火山石底砂:五大功能提升水族生态
新手必看:无需补碳的五种鱼缸植物推荐
每天十多个虚拟号来电,治理虚拟号码滥用需多管齐下
桂林户外活动全攻略:12个必去景点推荐
AWS虚拟手机号注册指南:5步绑定+5大使用要点
薯片的健康隐患:营养成分分析与自制解决方案
自制薯片:健康美味与创意乐趣的完美结合
这种“豆腐”流传千年,看上去霉霉的,营养可不少
秋游红海滩:自驾可达的世界最大芦苇荡
徒步探险者的装备指南:全面测评与选购建议
头皮护理 vs 面部护肤:谁才是真正的抗衰神器?
皮屑芽孢菌:头皮屑的罪魁祸首
头皮健康护理,你做对了吗?
耶稣的祷告秘诀:谦卑、顺服与坚持
中国医师协会发布高钾血症管理新指南:血钾超5.0 mmol/L需及时管理
高钾血症患者如何安全食用香蕉?