Swift设计模式----适配器模式

2020-04-29  本文已影响0人  青山不改

适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。
现实生活中很多适配器模式的例子,比如MacBook的电源适配器,把220V的电压转换成20V的电压,再比如新版MacBook去掉了USB接口,还要买个雷电接口转USB的接口。

适配器模式一般都是被动引入,比如你的客户端需要读取一个json,但是你要调用一个第三方,这个第三方只能输出XML,这个时候为了不影响你的代码,就需要引入适配器,通过适配器把XML转成json输出给你。

我们先定义一个第三方:

class Third {
   func output() -> String {
       return "我是一段XML"
   }
}

它只会输出XML。
然后我们自己的调用者:

class Client {
    func input(json: String){
        print("我只能读入json格式,谁要是不按我的来,我就跟谁急,现在我来看看你是不是json:\(json)")
        
        if json.contains("JSON") {
            print("嗯,不错,你是良民")
        }else{
            print("你的良心大大的坏了")
        }
    }
}

它需要一段JSON,如果不是它就会很生气。。。
现在我们来调用这个第三方,看看它会怎么样:

let client = Client()
let third = Third()
client.input(json: third.output())

输出:

我只能读入json格式,谁要是不按我的来,我就跟谁急,现在我来看看你是不是json:我是一段XML
你的良心大大的坏了

看来不行,接下来我们引入适配器:

class Adapter{
    func convertXML2Json() -> String {
        let xml = Third().output()
        return "我把XML\(xml)转换成JSON并输出"
    }
}

他可以把XML转换成JSON。
然后再调用:

client.input(json: Adapter().convertXML2Json())

输出是这样的:

我只能读入json格式,谁要是不按我的来,我就跟谁急,现在我来看看你是不是json:我把XML我是一段XML转换成JSON并输出

嗯,不错,你是良民

看起来小儿科了,但这就是适配器模式的核心,把不兼容的接口包装一层,变成可以用的接口。这样就不用修改第三方,也不用修改你自己已有的代码,符合开闭原则。

上一篇下一篇

猜你喜欢

热点阅读