
主要的设计模式有哪些类型?by test
设计模式及其简单定义如下:
创建型模式(Creational Patterns)
关注对象的创建机制,提升灵活性和复用性。
单例模式(Singleton)
确保一个类只有一个实例,并提供全局访问点。
示例:数据库连接池、日志管理器。
工厂方法模式(Factory Method)
定义创建对象的接口,但由子类决定实例化哪个类。
示例:LoggerFactory 生成不同格式的日志器。
抽象工厂模式(Abstract Factory)
创建相关或依赖对象的家族,而无需指定具体类。
示例:GUI库(跨平台的按钮、文本框组合)。
建造者模式(Builder)
分步骤构建复杂对象,分离构造与表示。
示例:StringBuilder、SQL查询构造器。
原型模式(Prototype)
通过克隆现有对象来创建新对象,避免重复初始化。
示例:Java的Cloneable接口。
结构型模式(Structural Patterns)
关注类和对象的组合方式,形成更大结构。
适配器模式(Adapter)
使不兼容接口能协同工作。
示例:将旧版API适配到新系统。
装饰器模式(Decorator)
动态扩展对象功能,避免子类爆炸。
示例:Java I/O流(BufferedInputStream包装FileInputStream)。
代理模式(Proxy)
为对象提供代理以控制访问(如延迟加载、权限校验)。
示例:Spring AOP的动态代理。
外观模式(Facade)
提供简化接口,隐藏子系统复杂性。
示例:一键启动电脑(封装CPU、内存、硬盘等操作)。
桥接模式(Bridge)
分离抽象与实现,使两者独立变化。
示例:不同操作系统下的图形渲染API。
组合模式(Composite)
以树形结构处理部分-整体关系。
示例:文件系统(文件+文件夹统一接口)。
享元模式(Flyweight)
共享细粒度对象,减少内存消耗。
示例:游戏中的重复纹理、字符池。
行为型模式(Behavioral Patterns)
关注对象间的通信和职责分配。
观察者模式(Observer)
- 定义一对多依赖,对象状态变化时自动通知依赖者。
- 示例:事件监听、React/Vue的数据响应式。
策略模式(Strategy)
封装算法族,使其可互换。
示例:排序算法(快速排序、冒泡排序动态切换)。
命令模式(Command)
将请求封装为对象,支持撤销、队列等操作。
示例:GUI按钮操作、事务管理。
责任链模式(Chain of Responsibility)
让多个对象依次处理请求,避免请求者与接收者耦合。
示例:Web框架的中间件(如Express.js)。
状态模式(State)
允许对象在内部状态改变时改变行为。
示例:订单状态(待支付、已发货、已完成)。
模板方法模式(Template Method)
定义算法骨架,子类重写特定步骤。
示例:AbstractList 的通用列表操作。
迭代器模式(Iterator)
提供统一方式遍历集合对象。
示例:Java的Iterator接口。
中介者模式(Mediator)
通过中介对象减少对象间直接通信。
示例:聊天室(用户不直接互发消息,通过服务器中转)。
备忘录模式(Memento)
捕获并外部化对象状态,以便后续恢复。
示例:游戏存档、撤销操作。
访问者模式(Visitor)
将算法与对象结构分离,便于新增操作。
示例:编译器对AST(抽象语法树)的不同分析。
解释器模式(Interpreter)
定义语言的语法表示,并解释执行。
示例:正则表达式引擎、SQL解析。
