Go 语言实现 23 种设计模式适配器

本文介绍使用Go语言实现适配器模式,该模式允许将一个接口转换为客户期望的另一个接口,从而使原本因接口不兼容而无法合作的类能够协同工作。通过具体的代码示例,展示了如何创建适配器来桥接不同接口之间的差异。

Go 语言实现 23 种设计模式适配器

将一个类型的接口转换成客户希望的另外一个接口,使原本由于接口不兼容而不能一起工作的类可以一起工作。

Example_one

package main

import "fmt"

// Adaptee 适配者
type MyLegacyPrinter struct{}
 
func (l *MyLegacyPrinter) Print(s string) (newMsg string) {
	newMsg = fmt.Sprintf("Legacy Printer: %s\n", s)
	println(newMsg)
	return
}


// 目标抽象类
type LegacyPrinter interface {
	Print(s string) string
}

// 客户要求接口
type ModernPrinter interface {
	PrintStored() string
}

// 适配器
type PrinterAdapter struct {
	OldPrinter LegacyPrinter
	Msg        string
}

func (p *PrinterAdapter) PrintStored() (newMsg string) {
	if p.OldPrinter != nil {
		newMsg = fmt.Sprintf("Adapter: %s", p.Msg)
		newMsg = p.OldPrinter.Print(newMsg)
	} else {
		newMsg = p.Msg
	}
	return
}

func main() {
	// 旧的使用方式
	var old_adapter MyLegacyPrinter
	old_adapter.Print("Old ")


	// 适配器模式
	msg := "New"
	new_adapter := PrinterAdapter{OldPrinter: &MyLegacyPrinter{}, Msg: msg}

	returnMsg := new_adapter.PrintStored()
	fmt.Print(returnMsg)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值