[设计模式 Go实现] 结构型~适配器模式

适配器模式用于转换一种接口适配另一种接口。

实际使用中Adaptee一般为接口,并且使用工厂函数生成实例。

在Adapter中匿名组合Adaptee接口,所以Adapter类也拥有SpecificRequest实例方法,又因为Go语言中非入侵式接口特征,其实Adapter也适配Adaptee接口。

adapter.go
go 复制代码
package adapter

//Target 是适配的目标接口
type Target interface {
    Request() string
}

//Adaptee 是被适配的目标接口
type Adaptee interface {
    SpecificRequest() string
}

//NewAdaptee 是被适配接口的工厂函数
func NewAdaptee() Adaptee {
    return &adapteeImpl{}
}

//AdapteeImpl 是被适配的目标类
type adapteeImpl struct{}

//SpecificRequest 是目标类的一个方法
func (*adapteeImpl) SpecificRequest() string {
    return "adaptee method"
}

//NewAdapter 是Adapter的工厂函数
func NewAdapter(adaptee Adaptee) Target {
    return &adapter{
        Adaptee: adaptee,
    }
}

//Adapter 是转换Adaptee为Target接口的适配器
type adapter struct {
    Adaptee
}

//Request 实现Target接口
func (a *adapter) Request() string {
    return a.SpecificRequest()
}
adapter_test.go
go 复制代码
package adapter

import "testing"

var expect = "adaptee method"

func TestAdapter(t *testing.T) {
    adaptee := NewAdaptee()
    target := NewAdapter(adaptee)
    res := target.Request()
    if res != expect {
        t.Fatalf("expect: %s, actual: %s", expect, res)
    }
}
相关推荐
女王大人万岁2 小时前
Go标准库 io与os库详解
服务器·开发语言·后端·golang
女王大人万岁4 小时前
Go语言time库核心用法与实战避坑
服务器·开发语言·后端·golang
Tony Bai5 小时前
【分布式系统】11 理论的试金石:用 Go 从零实现一个迷你 Raft 共识
开发语言·后端·golang
浮尘笔记5 小时前
Go语言并发安全字典:sync.Map的使用与实现
开发语言·后端·golang
小二·6 小时前
Go 语言系统编程与云原生开发实战(第3篇):企业级 RESTful API 开发 —— 中间件、验证、文档与权限控制
云原生·golang·restful
娟宝宝萌萌哒7 小时前
智能体设计模式重点
人工智能·设计模式
还在忙碌的吴小二7 小时前
Go-View 数据可视化大屏使用手册
开发语言·后端·信息可视化·golang
Andy&lin8 小时前
【医疗】智慧病房APP原型模板
设计模式·产品运营·人机交互·交互·健康医疗
Engineer邓祥浩8 小时前
设计模式学习(22) 23-20 解释器模式
学习·设计模式·解释器模式
钦拆大仁8 小时前
Java设计模式-状态模式
java·设计模式·状态模式