软件设计中常见的设计模式

以下是常见的设计模式,并且给出了应用场景:

  1. 工厂模式(Factory Pattern):用于创建对象,隐藏了具体对象的创建细节,客户端只需要通过工厂接口获取对象即可。应用场景包括:当需要根据不同的参数生成不同类型的对象时;当需要遵循"开闭原则",即增加新类型时,只需要添加新的工厂类。

  2. 单例模式(Singleton Pattern):用于确保一个类只能有一个实例,并提供全局访问点。它通常在需要共享资源、控制资源访问或仅需要一个实例的情况下使用。

  3. 观察者模式(Observer Pattern):定义了一种一对多的依赖关系,当一个对象的状态发生改变时,它的所有依赖者都会收到通知并自动更新。应用场景包括:当需要实现对象间的松耦合关系,而又不希望使用面向对象继承的方式时;当需要实现事件处理机制的时候。

  4. 适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口,使得原本由于接口不兼容而无法工作的类能够一起工作。应用场景包括:当需要复用一些类,但这些类的接口与你的代码不兼容时;当需要创建一个可重用的类,该类可以与不相关的或者不可预见的类协同工作。

  5. 策略模式(Strategy Pattern):定义了一族算法,并使其相互之间可以互换。它将算法的使用和实现分离,客户端可以灵活地选择不同的策略来完成相同的任务。应用场景包括:当需要定义一些算法,并且希望在运行时动态地选择其中一种算法时;当一个对象有多种行为,可能在不同的场景下使用不同行为时。

  6. 装饰器模式(Decorator Pattern):动态地将责任附加到对象上,扩展对象的功能。它通过创建包装对象来实现,保持接口的一致性。应用场景包括:当需要增强对象的功能,且不希望改变原有的类结构时;当需要给对象添加多个可选的功能时,在不同情况下选择不同的功能组合。

  7. 迭代器模式(Iterator Pattern):提供一种方法来顺序访问一个聚合对象中的各个元素,而无需暴露其内部实现。它将遍历算法与数据结构分离,使得可以独立地改变遍历方式。应用场景包括:当需要对聚合对象进行复杂的遍历时;当需要提供一种通用的遍历方式,而不暴露聚合对象的内部表示时。

  8. 状态模式(State Pattern):允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。它将不同的状态封装成独立的类,使得状态变化时对象的行为更易管理、扩展和维护。应用场景包括:当一个对象的行为取决于它的状态且该状态可能发生改变时;当需要根据不同状态做出不同的响应时。

补充

解释器模式(Interpreter Pattern)是一种行为型设计模式,它定义了一个语言的文法表示,并且定义了一个解释器来解释该语言中的表达式。该模式主要用于解决某些特定类型的问题,例如编译器、解析器等。

在解释器模式中,通常包含以下几个角色:

  1. 抽象表达式(AbstractExpression):定义一个抽象的接口,用于解释上下文中的表达式。

  2. 终结符表达式(Terminal Expression):实现抽象表达式接口,代表语法中的终结符,进行具体的解释操作。

  3. 非终结符表达式(Non-terminal Expression):实现抽象表达式接口,代表语法中的非终结符,通过递归调用实现对多个终结符的解释操作。

  4. 上下文(Context):包含解释器需要的全局信息,供解释器进行解释操作。

使用解释器模式可以构建一个简单的语言解释器,将复杂的语法规则转化为易于理解和操作的对象。通过添加新的解释器或修改现有的解释器,可以灵活地改变和扩展语言的语法规则。

总结来说,解释器模式通过定义语法规则和对应的解释器,实现了解释和执行特定语言的功能。它可以用于处理一些特定领域的语言解析和执行问题,使得语法规则的改变和扩展更加简单灵活。

相关推荐
临床数据科学和人工智能兴趣组6 小时前
在R语言中, 使用 as.factor() 函数转换数值型变量
开发语言·r语言
andyweike9 小时前
php笔记
开发语言·笔记·php
EatFan9 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
Maiko Star10 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
Circ.10 小时前
Python 调试 Litellm 本地大模型接口:模型列表与对话接口实操踩坑记录
开发语言·python
现任明教教主~11 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
Zhou14113612 小时前
SpringSecurity_02_授权与高级功能
开发语言·python
一条破秋裤12 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
布吉岛的石头12 小时前
Java 程序员第 49 阶段5:BERT 预训练目标 MLM+NSP 的工程含义
java·人工智能·深度学习·bert·transformer
码匠许师傅12 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http