设计模式(四)| 青训营笔记

49 阅读3分钟

前三篇笔记讲了五种创造型设计模式,接下来讲讲结构型设计模式,最近在准备毕业论文,所以看代码的时间不多

先回顾一下创造型设计模式,这类模式提供了一种创建对象的最佳方式,并且可以保证系统更加灵活、可扩展、易于维护。其中包括工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式等。

接下来讲的结构型模式,这类模式关注对象之间如何组合成更大的结构,以适应变化的需求。在实现过程中,通常会使用接口和继承等面向对象的特性,以达到高内聚、低耦合的目的。其中包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式等。

1. 适配器模式

  1. 适配器模式理念

适配器模式是一种结构型设计模式,它的主要设计思想是:将一个类的接口转换成客户端期望的另一个接口,从而让原本不兼容的类能够协同工作。

  1. 适配器模式设计思路

适配器模式的设计思路很简单,核心是引入一个新的适配器类,在该类中完成将不兼容的接口转换成目标类期望的接口的功能。具体来说,适配器模式的实现步骤如下:

  • 定义目标接口(也就是客户端期望的接口)。
  • 定义需要适配的接口(也就是被适配的接口)。
  • 定义一个适配器类,实现目标接口,并在适配器内部调用被适配对象的接口,实现接口转换。
  1. 适配器模式应用场景

适配器模式的应用场景十分广泛,特别是在不同系统或组件间进行整合、重用、升级、扩展等方面。常见的应用场景包括:

  • 在不修改已有代码的情况下,使不兼容的接口能够协同工作。
  • 将一个已有类的接口转化为客户端需要的接口。
  • 需要复用已有的类,但是与其他类协作需要进行适配。
  1. 适配器模式Golang代码举例

在Golang中,我们可以使用结构体和接口来实现适配器模式。以下是一个简单的代码示例:

package main

import "fmt"

type Target interface {
    Request() string
}

type Adaptee struct{}

func (a *Adaptee) SpecificRequest() string {
    return "Specific request."
}

type Adapter struct {
    *Adaptee
}

func (a *Adapter) Request() string {
    return a.SpecificRequest()
}

func main() {
    adaptee := &Adaptee{}
    adapter := &Adapter{adaptee}
    result := adapter.Request()
    fmt.Println(result)
}

在上述代码中,Adaptee是被适配的对象,Target是目标接口,Adapter是适配器类。在Adapter中,我们将Adaptee的接口转换成了Target所期望的接口。具体地,在Adapter中实现了Target接口,并在方法中调用了Adaptee的接口。在main函数中,我们先创建并初始化了Adaptee对象,然后通过Adapter来调用该对象的方法,最终打印输出结果:Specific request.