桥接模式(Bridge Pattern)是一种结构型设计模式,在该模式中,将一个大类或一系列紧密相关的类拆分成两个独立的层次结构,从而使它们可以独立地进行修改、扩展,也可以通过组合任意一种高层抽象与底层实现,从而实现二者间的桥接。桥接模式主要包含以下角色:抽象化角色(Abstraction):该角色定义抽象类接口,维护一个抽象类成员(即实现被委托的对象),并在其构造函数中注入一个实现的接口,提供一个通用的操作。实现化角色(Implementor):该角色定义实现的接口,以供抽象化角色调用。具体实现化角色(Concrete Implementor):该角色是实现化角色的具体实现,实现在实现...
代理模式(Proxy Pattern)是一种结构型设计模式,它让一个类代表另外一个类的功能。在代理模式中,我们创建一个代理类,用于代表原始类的功能。代理模式有两个角色:代理类和原始类。代理类和原始类都实现了同一个接口,这意味着客户端可以使用代理类的对象来代替原始类的对象。代理类实现了与原始类相同的方法,但是在代理类中,它们会执行一些额外操作,比如记录日志、缓存结果、控制访问等。代理模式以各种方式实现,其中最常见的是通过在代理类中创建一个实例变量来引用原始类的对象。代理类中的方法通过实例变量来调用原始类中的方法。golang实现// Subject 接口定义了代理类和原始类的公共接口。 t...
外观模式(Facade Pattern)是一种结构型设计模式,它为客户端提供一个简单、统一的接口,用以访问子系统中的一组接口。在外观模式中,一个高层接口(即Facade)可以将多个复杂的子系统接口封装成一个简单的接口,从而提供给客户端一个更加简单的接口。举个例子,我们可以考虑一个汽车制造工厂,该工厂包含引擎制造、悬挂制造、底盘制造、内饰制造等子系统。如果我们要制造一辆汽车,就需要逐个调用每个子系统来完成。但是,使用外观模式就可以将所有的操作封装成一个Facade类的方法,可以快速完成汽车的制造。外观模式的优点包括:简化客户端的调用过程,客户端只需要和Facade接口进行交互,不需要与子系...
组合模式是一种结构型设计模式,它将对象组合成树形结构来表示“整体-部分”的层次关系,使得用户对单个对象和组合对象的访问具有一致性。组合模式由以下几个角色组成:组件(Component):组合中的所有对象都要实现的接口或抽象类,用于定义公共行为并管理所有子组件。叶子(Leaf):组合中的叶子节点,它不包含任何子组件。容器(Composite):组合中的容器节点,它包含一个或多个子组件,子组件可以是叶子节点或者其他容器节点。使用组合模式,我们可以将对象组合成树形结构,从而可以方便地进行操作和管理。例如,在图形界面设计中,我们可以将“窗口”、“框架”、“按钮”等控件组合成为一个整体窗口,并进行...
状态模式是一种行为型设计模式,它可以根据一个对象的内在状态来改变它的行为。该模式将对象的状态封装成不同的类,每个状态都会实现该对象的一个公共接口,并在发生状态转换时更改对象所维护的状态类。这种模式主要由以下几个角色组成:上下文(Context):它是状态模式中的主要角色,包含一些内部状态,用于管理不同状态的对象。上下文可以将状态转换委托给状态类来进行处理。抽象状态(State):它是所有具体状态的基类。抽象状态定义了一个接口,每个具体状态都实现了这个接口。具体状态(ConcreteState):它是状态模式中的具体类,它实现了抽象状态的接口,并定义了它自己的行为。具体状态类负责从上下文中...
命令模式是一种行为型设计模式。它将请求的发送者和接收者解耦,并且支持撤销和恢复操作。在命令模式中,请求被封装成一个命令对象,并在命令对象中封装了执行命令所需要的必要信息,如被调用的方法、方法参数等。命令模式中通常有四个主要角色:请求者(Invoker):请求发送者,负责发送命令请求。命令接口(Command):定义命令的接口。具体命令(Concrete Command):实现命令接口,保存命令的执行信息,如接收者、方法名、方法参数等。接收者(Receiver):实现了真正完成命令操作的方法。命令模式将请求者和接收者分离开来,通过命令对象封装请求,让接收者独立于请求者发送命令。这样就可以轻...
模板方法模式是一种行为型设计模式。它定义了一个操作中的算法框架,将某些步骤放在子类中实现。这样可以让子类在不改变算法框架的情况下,重新定义算法中的某些步骤。模板方法模式中通常有两个主要角色:抽象类(Abstract Class):定义了算法中的关键步骤,其中某些步骤由子类实现。具体子类(Concrete Class):实现了抽象类定义的某些步骤。使用模板方法模式的一个典型场景是在多个类中实现某些共同的方法,但每个类又有一些特定的实现。在这种情况下,可以将这些共同的方法抽象到一个基类中,让每个子类只需实现自己的特定实现即可。golang实现代码:// 抽象类 type AbstractCl...
策略模式是一种行为型设计模式。它允许在运行时选择算法的行为,使算法的行为可以独立于调用它的上下文而变化。策略模式中通常有三个主要角色:环境(Context):维护一个对策略的引用,调用所选策略的方法。策略接口(Strategy):定义一个通用的算法接口。策略具体实现(Concrete Strategy):实现算法接口,提供具体的算法实现。策略模式的核心思想是将算法的实现与其调用分离。由于不同的策略具有不同的实现,因此可以在运行时选择适当的算法实现进行调用。这使得算法可以独立于其调用者而演化。另外,策略模式遵循了开放/封闭原则,因为可以轻松添加新的算法而不必修改现有算法的源代码。golan...
适配器模式是一种结构型设计模式。它的主要目的是将一种接口转换成客户希望的另一种接口表示。适配器使原本由于接口不兼容而无法工作的类能够一起工作。适配器模式中通常有三个主要角色:目标接口(Target):客户端所希望的接口。源接口(Adaptee):需要被适配的接口。适配器(Adapter):将源接口转换成目标接口的类。适配器模式可以使用两种不同的实现方法:类适配器:使用继承来适配接口,即适配器实现目标接口,同时继承源接口,实现目标接口的方法调用源接口的方法。对象适配器:使用组合来适配接口,即适配器实现目标接口,同时包含了一个源接口的实例,目标接口的方法调用源接口实例的方法。适配器模式的优点...
观察者模式是一种行为设计模式,它定义了一种对象之间的一对多依赖关系,以便当一个对象的状态发生改变时可以自动通知其他依赖于此对象状态的对象并进行相应的更新操作。在观察者模式中,通常会有两个主要的角色:Subject(被观察者)和Observer(观察者)。Subject 可以被多个 Observer 对象所依赖,当它的状态发生改变时,它会通知所有注册为它的观察者对象,以便观察者们可以及时地更新自己的状态。具体地说,观察者模式通常包含以下几个步骤:定义 Subject 类,用于被 Observer 对象所观察的对象。Subject 类通常包含一个注册观察者的方法,用于将 Observer 对...