单例
- 单例(Singleton):确保一个类只有一个实例,并提供一个全局访问点。
- 场景:需要确保一个类只有一个实例,并提供全局访问点。例如,配置管理器或数据库连接池。
工厂方法(Factory Method)
- 抽象产品(AbstractProduct)
- 具体产品(ConcreteProduct)
- 抽象工厂(AbstractFactory)
- 具体工厂(ConcreteFactory)
- 场景:需要根据不同的条件创建不同的对象,而无需指定具体的类。例如,图形界面的按钮生成。
抽象工厂
- 抽象工厂(AbstractFactory)
- 具体工厂(ConcreteFactory)
- 抽象产品(AbstractProduct)
- 具体产品(ConcreteProduct)
- 场景:需要创建一系列相关或依赖的对象,而不需要具体指定它们的类。例如,创建不同操作系统的用户界面控件。
建造者模式
- 产品(Product)
- 抽象建造者(Builder)
- 具体建造者(ConcreteBuilder)
- 指挥者(Director)
- 场景:需要构建复杂的对象,尤其是当对象的构建过程需要步骤化时。例如,构建复杂的文档或报表。
原型模式
-
原型(Prototype)
-
具体原型(ConcretePrototype)
-
场景:需要复制对象,而不是重新创建它们。例如,图形编辑器中的复制粘贴功能。
适配器模式
-
目标接口(Target):定义了客户端所期望的接口。
-
源类(Adaptee):需要被适配的、拥有不兼容接口的类。
-
适配器(Adapter):将源类的接口转换为目标接口,使得客户端能够使用源类的功能。
-
场景:需要将一个类的接口转换为客户端期望的另一个接口。例如,将旧版系统的接口与新版系统兼容。
例如,假设有一个 Target
接口定义了 operation
方法,Adaptee
类具有 specificOperation
方法,而 Adapter
类实现了 Target
接口,并在内部调用 Adaptee
的 specificOperation
方法来完成 operation
方法的功能。
桥接模式
- 抽象(Abstraction)
- 细化抽象(RefinedAbstraction)
- 实现者(Implementor)
- 具体实现者(ConcreteImplementor)
- 场景:需要分离抽象和实现,使得它们可以独立变化。例如,绘图应用程序中不同类型的形状和渲染方式。
组合模式
- 组件(Component)
- 叶子节点(Leaf)
- 组合节点(Composite)
- 场景:需要处理树形结构的对象,允许将对象组合成树形结构以表示部分-整体层次结构。例如,文件系统中的目录和文件。
装饰模式
- 抽象构件(Component)
- 具体构件(ConcreteComponent)
- 抽象装饰器(Decorator)
- 具体装饰器(ConcreteDecorator)
- 场景:需要动态地给对象添加功能,而不影响其他对象。例如,为窗体添加滚动条功能。
外观模式(Facade Pattern)
- 外观(Facade)
- 子系统(Subsystem)
- 场景:需要简化对复杂系统的访问,提供一个统一的接口。例如,简化对多个子系统的访问接口。
享元模式
- 抽象享元(Flyweight)
- 具体享元(ConcreteFlyweight)
- 享元工厂(FlyweightFactory)
- 场景:需要大量对象,但这些对象的共享可以减少内存使用。例如,大量相同字符的文本处理。
代理模式
- 抽象主题(Subject)
- 真实主题(RealSubject)
- 代理(Proxy)
- 场景:需要控制对另一个对象的访问,例如懒加载、权限控制等。例如,远程对象的访问代理。
-------------------------------------------------------------------
责任链模式
- 抽象处理者(Handler)
- 具体处理者(ConcreteHandler)
- 场景:需要将请求传递给多个对象,并由这些对象处理请求。例如,日志记录处理。
命令模式
- 命令(Command)
- 接收者(Receiver)
- 调用者(Invoker)
- 场景:需要将请求封装为对象,允许参数化请求、队列请求或支持撤销操作。例如,图形编辑器中的操作撤销。
解释器模式
- 抽象表达式(AbstractExpression)
- 终结符表达式(TerminalExpression)
- 非终结符表达式(NonterminalExpression)
- 上下文(Context)
- 场景:需要定义一个语言的文法,并解释语言中的句子。例如,编译器或解释器。
迭代器模式
- 抽象迭代器(Iterator)
- 具体迭代器(ConcreteIterator)
- 聚合(Aggregate)
- 场景:需要访问集合中的元素,而不暴露集合的内部结构。例如,遍历容器中的元素。
中介者模式
- 抽象中介者(Mediator)
- 具体中介者(ConcreteMediator)
- 同事(Colleague)
- 场景:需要减少对象之间的直接通信,集中管理对象之间的交互。例如,聊天室中的用户管理。
备忘录模式
- 原发器(Originator)
- 备忘录(Memento)
- 管理者(Caretaker)
- 场景:需要保存和恢复对象的状态,而不暴露对象的实现细节。例如,文本编辑器的撤销功能。
观察者模式
- 抽象主题(Subject)
- 具体主题(ConcreteSubject)
- 抽象观察者(Observer)
- 具体观察者(ConcreteObserver)
- 场景:需要定义一对多的依赖关系,使得一个对象的状态变化可以通知所有依赖于它的对象。例如,事件处理系统。
状态模式
- 环境(Context)
- 抽象状态(State)
- 具体状态(ConcreteState)
- 场景:需要根据对象的内部状态改变对象的行为。例如,状态机模型。
策略模式
- 环境(Context)
- 抽象策略(Strategy)
- 具体策略(ConcreteStrategy)
- 场景:需要定义一系列算法,并使得它们可以互换。例如,排序算法的选择。
模版方法模式(唯一的类行为性模式)
- 抽象类(AbstractClass)
- 具体子类(ConcreteClass)
- 场景:需要定义一个算法的框架,并允许子类实现算法的某些步骤。例如,数据处理的模板。
访问者模式
-
抽象访问者(Visitor)
-
具体访问者(ConcreteVisitor)
-
元素(Element)
-
对象结构(ObjectStructure)
-
场景:需要对一组对象执行操作,而不改变对象的类。例如,对不同类型的元素执行不同的操作。