【博客389】设计模式之:适配器模式

内容:记录适配器模式的学习

适配器模式:

适配器模式:

适配器模式是作为两个不兼容的接口之间的桥梁,它结合了两个独立接口的功能。
适配器模式用于转换一种形态到另一种形态,使功能能够正常使用,达到适配的效果


目的:      适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
解决的问题:系统需要使用现有的类,而此类的接口不符合系统当前的需要,主要解决的是将一些现存的
           对象放到新的环境中,而新环境要求的接口是现对象不能满足的。
解决方案:  采用一个新的适配器对象,实现的是新的接口,但是包含的是现有的类,在实现新接口时,
           实际调用的是现有的类的接口
解决效果: 可以让两个无关的类一起运行,提高了类的复用,增加了类的透明度,灵活性好
缺点:     过多的使用适配器,会让系统非常凌乱,不易整体把握  

适配器模式示例:

场景
现在只有Type-C接口,当前有一个键盘,但它使用的是USB接口,要求实现一个适配器转接头,
使得键盘也可以插上Type-C接口成功使用。


adapter.go:

package adapter

// TypeC接口
type TypeC interface {
     
	UseTypeC() string
}

// USB接口
type USB interface {
     
	UseUSB() string
}

func NewUSB() USB {
     
	return &keyboard{
     }
}

type keyboard struct{
     }

// keyboard实现了USB接口
func (a *keyboard) UseUSB() string {
     
	return "I use USB interface"
}

//NewAdapter 是适配器的工厂函数
func NewAdapter(keyboard USB) TypeC {
     
	return &adapter{
     
		USB: keyboard,
	}
}

//Adapter是适配器对象,其中包含一个USB成员
type adapter struct {
     
	USB
}

//UseTypeC实现了Type-C接口
func (a *adapter) UseTypeC() string {
     
	return a.UseUSB() + ", something that balance the usb and type-c"
	//use the usb function and deal with something that type-c conflict with usb
}


//使用函数:

adapter_test.go:

package adapter

import "testing"

func TestAdapter(t *testing.T) {
     
	usb := NewUSB()
	adapter := NewAdapter(usb)

	t.Log(usb.UseUSB())
	t.Log(adapter.UseTypeC())
}

你可能感兴趣的:(【博客389】设计模式之:适配器模式)