美文网首页
Swift设计模式----适配器模式

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

作者: 青山不改 | 来源:发表于2020-04-29 10:49 被阅读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并输出
    
    嗯,不错,你是良民
    
    

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

    相关文章

      网友评论

          本文标题:Swift设计模式----适配器模式

          本文链接:https://www.haomeiwen.com/subject/sttgwhtx.html