软考23种设计模式
时间: 2025-05-27 07:17:33 浏览: 12
### 软考中的23种设计模式详解
#### 创建型设计模式
创建型设计模式主要关注对象的创建过程,通过抽象化和封装来减少硬编码依赖。
1. **抽象工厂(Abstract Factory)**
- 提供了一组用于创建一系列相关或相互依赖的对象的接口,而无需指定它们具体的类。这种模式适用于需要跨多个产品族创建对象的情况[^1]。
2. **工厂方法(Factory Method)**
- 定义了一个用于创建对象的接口,但由子类决定实例化的具体类。这种方式将对象的创建延迟到了子类实现中,从而提高了灵活性和可扩展性[^3]。
3. **单例(Singleton)**
- 确保某一个类只有一个实例,并提供全局访问点。常用于管理共享资源,比如配置文件或数据库连接池[^1]。
4. **生成器(Builder)**
- 将复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示形式。特别适合于处理具有大量可选参数的对象初始化场景[^2]。
5. **原型(Prototype)**
- 使用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。这种方法对于性能优化非常有用,尤其是在频繁克隆的情况下[^1]。
---
#### 结构型设计模式
结构型设计模式主要用于简化复杂的结构关系,提高系统的模块性和重用性。
1. **适配器(Adapter)**
- 将不兼容的接口转换成客户端期望的形式,允许原本无法一起工作的类协同工作[^1]。
2. **桥接(Bridge)**
- 将抽象部分与其实现部分分离开来,从而使两者都可以独立变化。这有助于降低耦合度并增强系统的可维护性。
3. **组合(Composite)**
- 使客户以统一的方式对待单个对象以及对象容器,通常用来描述树形结构的数据层次体系。
4. **装饰器(Decorator)**
- 动态地给某个对象增加额外的功能,而不影响其他同类对象的行为。这是一种替代继承的方式来扩展功能的有效手段[^1]。
5. **外观(Facade)**
- 提供了一个简化的接口,隐藏了底层系统组件之间的复杂交互细节,降低了外部调用者的认知负担。
6. **享元(Flyweight)**
- 主要目的是通过共享技术有效地支持大量的细粒度对象,尤其在内存有限时能显著提升效率[^1]。
7. **代理(Proxy)**
- 为另一个对象提供一种控制机制,以便间接访问该对象。它可以用于远程服务调用、缓存或者权限验证等场合[^1]。
---
#### 行为型设计模式
行为型设计模式专注于对象间的职责分配和通信方式。
1. **责任链(Chain of Responsibility)**
- 避免请求发送者与接收者之间形成固定的绑定关系,允许多个潜在接受者按顺序尝试处理同一个请求。
2. **命令(Command)**
- 将请求封装成对象,从而可以用不同请求对客户端进行参数化;也可以支持撤销操作等功能。
3. **解释器(Interpreter)**
- 对于简单的语法表达式,可以通过定义其语言的文法规则并通过递归算法求解语句含义。
4. **迭代器(Iterator)**
- 提供一种遍历集合元素的方法,而又不需要暴露集合内部的具体表现形式。
5. **中介者(Mediator)**
- 减少对象间直接联系的数量,引入中间层负责协调各参与者之间的协作逻辑[^1]。
6. **备忘录(Memento)**
- 不破坏封装性的前提下捕获当前状态保存起来,之后再恢复到之前的状态[^1]。
7. **观察者(Observer)**
- 当被观察目标发生改变时自动通知所有注册过的观察者更新自己的数据[^1]。
8. **状态(State)**
- 允许对象在其内部状态发生变化时调整它的行为,仿佛改变了自身的类一样[^1]。
9. **策略(Strategy)**
- 定义了一系列算法并将每一个都封装起来,使得他们可以互换使用,达到运行期间动态切换的目的。
10. **模板方法(Template Method)**
- 在父类中定义好整个流程框架,把某些特定步骤留给子类去完成,既保留核心不变又给予足够的自由空间定制差异之处[^1]。
11. **访问者(Visitor)**
- 添加新操作变得容易,因为只需要新增加一个新的访问者即可覆盖现有所有的节点类型。
---
```python
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
instance = super().__call__(*args, **kwargs)
cls._instances[cls] = instance
return cls._instances[cls]
class Singleton(metaclass=SingletonMeta):
pass
singleton_instance_1 = Singleton()
singleton_instance_2 = Singleton()
print(singleton_instance_1 is singleton_instance_2) # True
```
---
#### 总结
以上就是软考中常见的23种经典设计模式及其基本概念介绍。每种模式都有各自适用范围及优缺点分析,在实际开发过程中应根据需求合理选用合适的解决方案。
阅读全文
相关推荐


















