Swift设计模式之适配器模式

转自

原文

// 适配器模式
// 百度百科:适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中
// 设计模式分类:结构型模式

/** * 两针插座接口 */
protocol TwoPinPlugProtocol {
    var pin1: String { get }
    var pin2: String { get }
}

/// 现在有一个三针插座
class ThreePinPlug {
    var pin1: String {
        get {
            return "pin1 of ThreePinPlug"
        }
    }
    var pin2: String {
        get {
            return "pin2 of ThreePinPlug"
        }
    }
    var pin3: String {
        get {
            return "pin3 of ThreePinPlug"
        }
    }
}

/// 这是一个适配器, 将三针插座转化为两针插座
class TwoPinPlugAdapter: TwoPinPlugProtocol {
    let threePinPlug: ThreePinPlug!

    init(plug: ThreePinPlug) {
        self.threePinPlug = plug
    }

    var pin1: String {
        get {
            return threePinPlug.pin1
        }
    }
    var pin2: String {
        get {
            return threePinPlug.pin2
        }
    }
}

/** 打印两针插座信息(不可以接收三针插座) - parameter plug: 两针插座 */
func printTwoPinPlugInfo(plug: TwoPinPlugProtocol) -> Void {
    print("two pin plug info: [pin1 = \(plug.pin1),pin2 = \(plug.pin2)]")
}

let threePinPlug = ThreePinPlug() // 目前有一个三针插座
let twoPinPlugAdapter = TwoPinPlugAdapter(plug: threePinPlug) // 用适配器来包装

printTwoPinPlugInfo(twoPinPlugAdapter) // 包装后可以将三针插座放入只接收两针插座的接口中

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...