您的位置:首页 > 其它

设计模式之适配器模式

2017-11-05 16:15 260 查看
1.概念:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
2.类图



3.结构

    目标(Target)角色
:这就是所期待得到的接口。注意:由于这里讨论的是类适配器模式,因此目标不可以是类。

    源(Adapee)角色:现在需要适配的接口。

    适配器(Adaper)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。

4.通用代码
/**
* @Author: fc
* @Date: 15:31 2017/11/5
*/
interface Target {
/**
* 这是源类Adaptee也有的方法
*/
fun sampleOperation1()

/**
* 这是源类Adapteee没有的方法
*/
fun sampleOperation2()
}
class Adaptee {

fun sampleOperation1(){
println("这是源类Adaptee有的方法")
}
}
class Adapter(val adaptee: Adaptee):Target {

override fun sampleOperation1() {
this.adaptee.sampleOperation1()
}

/**
* 源类Adaptee没有方法sampleOperation2
* 因此由适配器类需要补充此方法
*/
override fun sampleOperation2() {
//写相关的代码
println("适配器类补充的方法")
}

}
fun main(args: Array<String>) {
//源对象
val adaptee:Adaptee = Adaptee()
//适配器对象
val adapter:Adapter = Adapter(adaptee)
adaptee.sampleOperation1()
adapter.sampleOperation2()
}
运行结果:
   这是源类Adaptee有的方法

   适配器类补充的方法

5.优点:

    1.复用性好:复用了现存的类,解决了现存类和复用环境要求不一致的问题

     2.扩展性好:在实现适配器功能的时候可以完全不影响系统其它功能的前提下,实现自己新加的功能

6.缺点:

    过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: