美文网首页
设计模式之桥接模式

设计模式之桥接模式

作者: 窗内户外 | 来源:发表于2019-04-15 19:10 被阅读0次

    1、定义

    将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

    2、角色划分

    2.1抽象化(Abstraction)角色

    定义抽象类,并包含一个对实现化对象的引用。

    2.2扩展抽象化(Refined Abstraction)角色

    是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。

    2.3实现化(Implementor)角色

    定义实现化角色的接口,供扩展抽象化角色调用。

    2.4具体实现化(Concrete Implementor)角色

    给出实现化角色接口的具体实现。

    3、UML关系图

    image.png

    4、优点

    1.由于抽象与实现分离,所以扩展能力强;
    2.其实现细节对客户透明。

    5、缺点

    由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。

    6、代码实现

    调用

    //来一大杯加冰咖啡
    let ice = IceAddtives()
    let coffee = BigCoffee.init(ice)
    coffee.makeCoffee()
    
    //来一小杯加糖咖啡
    let addtive = SugarAddtives()
    let coffee2 = SmallCoffee.init(addtive)
    coffee2.makeCoffee()
    

    实现

    //抽象部分:咖啡添加剂
    class CoffeeAddtives: NSObject {
    
        //业务逻辑
        func addtives() -> String {
            return ""
        }
    }
    
    class IceAddtives: CoffeeAddtives {
    
        override func addtives() -> String {
            return "加冰"
        }
    }
    
    class NonIceAddtives: CoffeeAddtives {
    
        override func addtives() -> String {
            return "不加冰"
        }
    }
    
    class SugarAddtives: CoffeeAddtives {
    
        override func addtives() -> String {
            return "加糖"
        }
    }
    
    class NonSugarAddtives: CoffeeAddtives {
    
        override func addtives() -> String {
            return "不加糖"
        }
    }
    
    //抽象的实现部分->型号
    //特点:持有抽象部分的引用
    class Coffee: NSObject {
    
        var addtives: CoffeeAddtives
        init(_ addtives:CoffeeAddtives) {
            self.addtives = addtives
        }
    
        func makeCoffee() {
            
        }
    }
    
    class BigCoffee: Coffee {
    
        override func makeCoffee() {
            print("大杯\(addtives.addtives())的咖啡")
        }
    }
    
    class MidduleCoffee: Coffee {
    
        override func makeCoffee() {
            print("中杯\(addtives.addtives())的咖啡")
        }
    }
    
    class SmallCoffee: Coffee {
    
        override func makeCoffee() {
            print("小杯\(addtives.addtives())的咖啡")
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:设计模式之桥接模式

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