首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

23 种设计模式

组合模式

以下是使用Golang实现组合模式的示例代码:

在上面的示例中,我们定义了一个 接口,它包含三个方法: 、 和 。然后,我们定义了两个具体的组件类: 和 。 类表示叶子节点,不包含任何子节点; 类表示组合节点,可以包含其他子节点。

在 类中,我们使用一个 数组来存储组合节点的子节点。 方法将新的子节点添加到数组中, 方法从数组中删除指定的子节点。 方法按顺序遍历子节点并递归调用 方法以显示整个组合节点的层次结构。在 类中,我们实现了 和 方法,但不做任何操作,因为叶子节点没有子节点。

在 函数中,我们创建了两个组合节点和三个叶子节点,并将其添加到组合节点中。然后,我们调用 方法以显示整个组合节点的层次结构

装饰器模式

以下是使用Golang实现装饰器模式的示例代码:

在上面的示例中,我们首先定义了一个 接口,它包含一个 方法以执行操作。然后,我们定义了一个具体的被装饰对象类 ,

它实现了 方法以执行基本操作。

接着,我们定义了一个 抽象类,它也实现了 接口,并包含一个指向被装饰对象的引用。然后,我们定义了两个具体的装饰器类 和 。这些类都实现了 方法,并在执行操作前先执行额外的操作。在 中,我们还调用了被装饰对象的 方法来执行基本操作。

在 函数中,我们首先创建了一个被装饰对象和两个装饰器。然后,我们将装饰器按照顺序嵌套起来形成一个装饰器链。最后,我们调用装饰器链的 方法来执行所有操作,包括添加的额外操作和被装饰对象的基本操作。

外观模式

以下是使用Golang实现外观模式的示例代码:

在上面的示例中,我们首先定义了两个子系统 和 。它们各自包含不同的操作。然后,我们定义了一个外观类 ,它包含对两个子系统的引用。在 函数中,我们实例化了两个子系统对象,并将它们保存在外观对象中。

在 类中,我们定义了一个 方法,它执行了一系列操作,包括调用子系统1的操作1和子系统2的操作4。外观类隐藏了底层子系统的复杂性,使客户端可以更方便地使用子系统。

在 函数中,我们创建了一个外观对象,并调用其 方法来执行操作。注意到客户端并没有直接调用子系统,而是通过外观类来简化操作。

享元模式

以下是使用Golang实现享元模式的示例代码:

}

在上面的示例中,我们首先定义了一个 `Flyweight` 接口,它包含一个 `Operation` 方法。然后,我们定义了一个具体的享元类 `ConcreteFlyweight`,它实现了 `Operation` 方法以执行操作。接着,我们定义了一个享元工厂类 `FlyweightFactory`,它维护一个享元对象池。在 `GetFlyweight` 方法中,如果池中已经有指定键的享元对象,则返回该对象;否则,创建一个新的享元对象并将其添加到池中,然后返回该对象。在 `main` 函数中,我们首先创建了一个享元工厂对象,并使用 `GetFlyweight` 方法获取两个不同的享元对象。由于这两个对象具有相同的数据,因此它们可以被共享使用。然后,我们分别调用两个享元对象的 `Operation` 方法来执行操作。

代理模式

以下是使用Golang实现代理模式的示例代码:

}

在上面的示例中,我们首先定义了一个 接口,它包含一个 方法。然后,我们定义了一个具体的主题类 ,它实现了 方法以执行请求。

接着,我们定义了一个代理类 ,它内部维护了一个对真实主题对象的引用。在 方法中,我们检查真实主题对象是否已经被创建。如果没有,则创建一个新的实例。在 方法中,我们首先初始化代理对象,然后调用真实主题对象的 方法来执行请求。

在 函数中,我们创建了一个代理对象,并调用其 方法来执行操作。由于代理对象内部维护了对真实主题对象的引用,因此它可以代表真实主题对象执行请求。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230622A08BCW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券