23种设计模式的角色

单例

  • 单例(Singleton):确保一个类只有一个实例,并提供一个全局访问点。
  • 场景:需要确保一个类只有一个实例,并提供全局访问点。例如,配置管理器或数据库连接池。

工厂方法(Factory Method)

  • 抽象产品(AbstractProduct)
  • 具体产品(ConcreteProduct)
  • 抽象工厂(AbstractFactory)
  • 具体工厂(ConcreteFactory)
  • 场景:需要根据不同的条件创建不同的对象,而无需指定具体的类。例如,图形界面的按钮生成。

抽象工厂

  • 抽象工厂(AbstractFactory)
  • 具体工厂(ConcreteFactory)
  • 抽象产品(AbstractProduct)
  • 具体产品(ConcreteProduct)
  • 场景:需要创建一系列相关或依赖的对象,而不需要具体指定它们的类。例如,创建不同操作系统的用户界面控件。

建造者模式

  • 产品(Product)
  • 抽象建造者(Builder)
  • 具体建造者(ConcreteBuilder)
  • 指挥者(Director)
  • 场景:需要构建复杂的对象,尤其是当对象的构建过程需要步骤化时。例如,构建复杂的文档或报表。

原型模式

  • 原型(Prototype)

  • 具体原型(ConcretePrototype)

  • 场景:需要复制对象,而不是重新创建它们。例如,图形编辑器中的复制粘贴功能。


适配器模式

  1. 目标接口(Target):定义了客户端所期望的接口。

  2. 源类(Adaptee):需要被适配的、拥有不兼容接口的类。

  3. 适配器(Adapter):将源类的接口转换为目标接口,使得客户端能够使用源类的功能。

  4. 场景:需要将一个类的接口转换为客户端期望的另一个接口。例如,将旧版系统的接口与新版系统兼容。

例如,假设有一个 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)

  • 场景:需要对一组对象执行操作,而不改变对象的类。例如,对不同类型的元素执行不同的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值