设计模式之适配器模式-创新互联

设计模式之适配器模式 概述

适配器模式: 将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装类(Wrapper),适配器模式既可以作为类结构型模式,也可以作为对象结构型模式

创新互联公司2013年成立,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元仁寿做网站,已为上家服务,为仁寿各地企业和个人服务,联系电话:13518219792
  • 在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者方法的集合

类似封装(设计模式使用了大量的继承、封装、闭包、高阶函数等方法)

在适配器模式中,通过增加一个新的适配器类来解决接口不兼容的问题,使得没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器模式和类适配器模式两种。在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系

对象适配器模式包含3个角色

  • Target(目标抽象类): 目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类
  • Adapter(适配器类): 适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。适配器类是适配器模式的核心,在对象适配器模式中,他通过继承Target并关联一个Adaptee对象使二者产生联系
  • Adaptee(适配者类):适配者即被适配的对象,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体的类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码
TypeC转USB充电接口

假设我们现在只有type-C的充电口,但是我们需要给只接受USB充电口的设备充电,这个时候我们就需要一个充电适配器来进行充电接口的转换

package adapter

import "fmt"

// USBTarget 目标接口
type USBTarget interface {USBCharge()
}

// Adapter 适配器
type Adapter struct {Adaptee TypeCAdaptee
}

func NewAdapter(adaptee TypeCAdaptee) *Adapter {return &Adapter{Adaptee: adaptee,
	}
}

func (a *Adapter) USBCharge() {fmt.Println("充电接口转换->USB")
	a.Adaptee.TypeCCharge()
}

// TypeCAdaptee 适配者
type TypeCAdaptee struct {}

func (t *TypeCAdaptee) TypeCCharge() {fmt.Println("开始充电")
}

这里我们定义了一个目标接口

// USBTarget 目标接口
type USBTarget interface {USBCharge()
}

还有一个Type-C的充电接口,这个Type-C接口是没办法进行USB充电的

// TypeCAdaptee 被适配者
type TypeCAdaptee struct {}
func (t *TypeCAdaptee) TypeCCharge() {fmt.Println("开始充电")
}

如果我们手里只有Type-C的接口,是没办法使用USB的充电的,所以这里还需要有一个充电适配器

// Adapter 适配器
type Adapter struct {Adaptee TypeCAdaptee
}

func NewAdapter(adaptee TypeCAdaptee) *Adapter {return &Adapter{  Adaptee: adaptee,
   }
}

func (a *Adapter) USBCharge() {fmt.Println("充电接口转换->USB")
   a.Adaptee.TypeCCharge()
}

这个充电适配器实现了USB充电的方法,在内部将充电的方法进行了转换,最后完成了USB的充电

测试
package adapter

import "testing"

func TestAdapter_ChargeAdapter(t *testing.T) {typeCAdaptee := TypeCAdaptee{}
   adapter := NewAdapter(typeCAdaptee)
   adapter.USBCharge()
}
//
// === RUN   TestAdapter_ChargeAdapter
// 充电接口转换,USB
// 充电
// --- PASS: TestAdapter_ChargeAdapter (0.00s)
// PASS
总结 优点
  1. 将目标类和适配者类接口,通过引入一个适配器类来重用现有的适配者类,无须修改原有的结构
  2. 增加了类的透明性和复用性,将具体的业务实现过程封装在适配器中

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:设计模式之适配器模式-创新互联
标题链接:http://scyanting.com/article/hcssh.html