23种设计模式都在哪使用过
时间: 2025-01-09 16:46:06 浏览: 3
### 设计模式概述
设计模式是在特定情况下最佳实践方法的总结,旨在解决软件开发过程中遇到的一般性问题。23 种经典的设计模式被分为三大类:创建型、结构型和行为型。
### 创建型模式
#### 单例模式 (Singleton Pattern)
用于确保一个类只有一个实例,并提供全局访问点。适用于配置管理器或日志记录工具等需要唯一实例的情况[^1]。
```java
public class Singleton {
private static final Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
```
#### 工厂方法模式 (Factory Method Pattern)
定义了一个创建对象接口,让子类决定实例化哪一个类。适合于框架设计中,允许扩展而不需要修改现有代码。
```csharp
public abstract class Creator {
public abstract Product FactoryMethod();
}
public class ConcreteCreator : Creator {
public override Product FactoryMethod() => new ConcreteProduct();
}
```
#### 抽象工厂模式 (Abstract Factory Pattern)
提供了一组相互依赖的对象家族而不指定具体类。常应用于跨平台UI库实现不同操作系统下的控件集。
```cpp
class AbstractButton { virtual void Paint()=0; };
class WinButton : public AbstractButton {};
class MacButton : public AbstractButton {};
class GUIFactory {
public:
virtual ~GUIFactory(){}
virtual Button* CreateButton() const = 0;
};
```
#### 建造者模式 (Builder Pattern)
将复杂对象构建过程与其表示分离,使得同样的构建流程可以创建不同的表现形式。多见于大型数据结构初始化场合。
```python
from abc import ABC, abstractmethod
class Builder(ABC):
@abstractmethod
def reset(self): pass
@abstractmethod
def setSeats(self, seats): pass
@abstractmethod
def setEngine(self, engine): pass
@abstractmethod
def getResult(self): pass
class Car():
def __init__(self) -> None:
self._seats = []
self._engine = ""
builder = Director(Car())
director.constructSportsCar(builder)
car = builder.getResult()
print(car.seats)
print(car.engine)
```
#### 原型模式 (Prototype Pattern)
通过复制已有对象来创建新对象,而不是从头开始构造。特别有用当对象创建成本较高时。
```javascript
function Prototype(name){
this.name=name;
};
Prototype.prototype.clone=function(){
var cloneObject=new Object();
for(var i in this){
if(this.hasOwnProperty(i)){
cloneObject[i]=this[i];
}
}
return cloneObject;
};
```
### 结构型模式
#### 适配器模式 (Adapter Pattern)
使原本不兼容的接口能够一起工作。比如旧版API与新版系统的对接[^2]。
#### 装饰者模式 (Decorator Pattern)
动态地给某个对象添加一些额外职责。通常用来增强功能而又不影响其他同类对象的行为。
#### 外观模式 (Facade Pattern)
为多个复杂的子系统提供更简单的统一接口。简化高层模块对底层组件的操作难度。
#### 桥接模式 (Bridge Pattern)
解耦抽象部分及其具体实现之间的关系。有助于减少继承层次并提高灵活性。
#### 组合模式 (Composite Pattern)
让用户能一致处理单个对象以及组合体中的各个成员。非常适合树形结构的数据展示需求。
#### 享元模式 (Flyweight Pattern)
利用共享技术有效地支持大量细粒度的对象。主要用于节省内存资源消耗较大的场景下。
### 行为型模式
#### 策略模式 (Strategy Pattern)
定义一系列算法并将每一种封装起来,使之可互换使用。便于切换策略逻辑而不影响客户端调用方式。
#### 观察者模式 (Observer Pattern)
建立一对多的关系以便通知所有订阅者状态变化的信息。广泛存在于事件驱动架构之中。
#### 中介者模式 (Mediator Pattern)
用中介对象封装一组对象间的交互细节。降低各部件之间直接通信带来的耦合程度。
#### 迭代器模式 (Iterator Pattern)
提供遍历集合元素的方法,无需暴露内部表示。增强了容器操作的安全性和便利性。
#### 解释器模式 (Interpreter Pattern)
针对简单语法表达式的解析执行机制。对于小型DSL(领域专用语言)非常实用。
#### 责任链模式 (Chain of Responsibility Pattern)
沿责任链条传递请求直到找到合适的处理器为止。可用于权限验证等多个连续决策环节。
#### 命令模式 (Command Pattern)
把命令请求封装成独立对象,从而实现参数化控制。方便撤销重做等功能拓展。
#### 访问者模式 (Visitor Pattern)
在不改变原有结构的前提下增加新的操作能力。尤其利于后期维护阶段的功能扩充。
#### 备忘录模式 (Memento Pattern)
保存当前状态快照供后续恢复之用。常见于游戏存档加载或者编辑器撤回动作里。
#### 状态模式 (State Pattern)
根据上下文环境自动调整自身行为特性。有效解决了条件分支过多造成的混乱局面。
#### 备忘录模式 (Template Method Pattern)
固定某些通用步骤的同时留给派生类自定义空间。典型例子如模板引擎渲染网页内容。
---
阅读全文