编辑
2025-09-28
C#
00

摘要

命令模式是一种行为型设计模式,它将请求封装成一个对象,从而使你可以用不同的请求对客户端进行参数化。这种模式可以将请求的发送者与接收者解耦,并且可以轻松地添加新的命令。

正文

结构

命令模式由以下几个角色组成:

  • 命令(Command):声明了一个执行操作的接口,通常包含一个Execute()方法。
  • 具体命令(Concrete Command):实现了命令接口,持有一个接收者对象,并实现了Execute()方法。
  • 接收者(Receiver):执行命令的对象。
  • 调用者(Invoker):持有一个命令对象,并在需要时调用命令的Execute()方法。
  • 客户端(Client):创建命令对象并将其分配给调用者。
编辑
2025-09-28
C#
00

摘要

模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将某些步骤的具体实现延迟到子类中。模板方法模式通过抽象类和具体类的组合来实现,抽象类定义了算法的骨架和抽象步骤,具体类实现了具体的步骤。

在模板方法模式中,算法的骨架由抽象类的模板方法来定义,模板方法包含一系列的抽象步骤,子类需要实现这些抽象步骤来完成算法的具体实现。模板方法还可以定义一些具体的步骤,这些步骤在抽象类中已经实现,子类不能重写。

正文

模板方法模式的结构

模板方法模式由以下几个角色组成:

  • 抽象类(Abstract Class):定义了一个模板方法,该方法定义了算法的骨架,包含一系列抽象步骤,子类需要实现这些步骤。
  • 具体类(Concrete Class):继承自抽象类,实现了抽象步骤,完成算法的具体实现。

模板方法模式的应用场景

模板方法模式适用于以下情况:

  • 当多个类具有相同的算法骨架,但其中某些步骤的实现可能不同,可以使用模板方法模式。
  • 当需要在不改变算法结构的情况下,只改变算法的某些步骤的实现时,可以使用模板方法模式。
编辑
2025-09-28
C#
00

摘要

代理模式是一种结构型设计模式,它允许通过代理对象控制对另一个对象的访问。在代理模式中,代理对象充当了客户端和目标对象之间的中介,从而可以在不改变目标对象的情况下添加额外的功能。

正文

代理模式由以下几个角色组成:

  • 抽象主题(Subject):定义了目标对象和代理对象的共同接口,这样代理对象就可以替代目标对象。
  • 目标对象(Real Subject):实际执行业务逻辑的对象,代理对象将请求转发给目标对象。
  • 代理对象(Proxy):包含一个指向目标对象的引用,并在调用目标对象之前或之后执行额外的操作。

代理模式的应用场景

代理模式适用于以下情况:

  • 当需要在不改变目标对象的情况下添加额外功能时,可以使用代理模式。
  • 当目标对象的创建和销毁需要额外的控制时,可以使用代理模式。
  • 当需要对目标对象进行保护和访问控制时,可以使用代理模式。
编辑
2025-09-28
C#
00

摘要

享元模式是一种结构型设计模式,它旨在通过共享尽可能多的对象来最小化内存使用和提高性能。该模式适用于需要创建大量相似对象的情况,通过共享这些对象的共同部分,可以减少内存占用和对象创建的开销。

正文

如何实现享元模式?

在实现享元模式时,我们需要将对象分为两个部分:内部状态(Intrinsic State)和外部状态(Extrinsic State)。内部状态是对象共享的部分,它不随外部环境的变化而改变。外部状态是对象特定的部分,它会随着外部环境的变化而变化。

享元模式的关键是使用一个工厂类来管理共享对象的创建和获取。工厂类维护一个对象池,用于存储已创建的对象。当需要获取对象时,首先检查对象池中是否存在符合条件的对象,如果存在则返回已存在的对象,否则创建一个新对象并添加到对象池中。

编辑
2025-09-28
C#
00

摘要

外观模式提供了一个高层接口,这个接口使得这一子系统更加容易使用。简单来说,外观模式就像是一个建筑物的“门面”,它隐藏了内部的复杂结构,只展示给用户简单、清晰的操作界面。

正文

外观模式的组件

外观模式主要涉及两个组件:

  1. 外观(Facade):一个提供简单接口的类,它调用系统中的其他类来完成任务。
  2. 复杂子系统:由多个类组成,每个类都有特定的责任和行为。这些类可以是库、框架或者系统的其他部分。

外观模式的优点

  • 简化接口:它为复杂的子系统提供一个简单的接口。
  • 降低耦合度:客户端与子系统的耦合度降低,因为客户端只需要与外观交互。
  • 提高灵活性:对子系统的修改不会影响到客户端。

外观模式的缺点

  • 不符合开闭原则:如果子系统需要添加新功能,可能需要修改外观类。

外观模式的例子

假设我们有一个家庭影院系统,它由多个部分组成:投影仪、音响、DVD播放器等。每个部分有自己的操作方式,如果用户直接与这些复杂的子系统交互,可能会感到困惑。因此,我们可以创建一个外观类来简化这些操作。