适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以协同工作。
接口兼容性:使不兼容的接口可以协同工作。
代码复用:可以在不修改现有代码的情况下,复用已有的类。
灵活性:可以在运行时动态地改变对象的行为。
旧系统集成:将旧系统中的类集成到新系统中,而不需要修改旧系统的代码。
第三方库集成:使用第三方库时,第三方库的接口可能与现有代码不兼容,可以使用适配器模式进行适配。
多接口实现:一个类需要实现多个接口,但这些接口的方法签名不同,可以使用适配器模式进行适配。
下面是一个简单的适配器模式示例,模拟一个系统需要使用一个第三方库的接口,但第三方库的接口与系统中的接口不兼容。通过适配器模式进行适配。
package main
import (
"fmt"
"time"
)
// 一个第三方接口,返回当前时间戳
type ThreeTimeServiceInterFace interface {
Now() int64
}
type ThreeTimeService struct{}
func (ts *ThreeTimeService) Now() int64 {
return time.Now().Unix()
}
// 一个业务接口,需要将时间戳减去 2000秒,并返回日期格式的字符串
type CurrentTimeServiceInterface interface {
GetDate(ts int64) string
}
type CurrentTimeService struct {
Ts ThreeTimeServiceInterFace
}
func (cts *CurrentTimeService) GetDate() string {
timestap := cts.Ts.Now() - 2000
return time.Unix(timestap, 0).Format("2006-01-02 15:04:05")
}
func main() {
ts := &ThreeTimeService{}
cts := &CurrentTimeService{Ts: ts}
fmt.Println(cts.GetDate())
}