桥接模式-定义
将抽象部分和实践部分分离,使他们都可以独立地进行变化。
桥接模式-解决问题
类层级爆炸问题
桥接模式-使用场景
场景一:开发中面临类层级结构复杂(爆炸),可以使用桥接模式
场景二:对不同的API之间进行桥接
场景三:一个类存在两个独立的维度,且这两个维度都需要进行扩张 (至少是两个维度)
桥接模式-角色划分
角色一:抽象部分(本类或者抽象协议)
角色二:抽象部分具体实现(继承自抽象部分或者遵守抽象协议)
角色三:需优化部分(抽象部分会持有该类对象)
角色四:需优化部分的具体实现
桥接模式-原理案例
喝咖啡
型号:大杯、中杯、小杯
配料:加冰、不加冰、加糖、不加糖
//抽象部分: <也可以定义成协议>
class Coffee: NSObject {
//第一个维度
var addtives:CoffeeAddtives
//第二个维度
//第三个维度
init(addtives:CoffeeAddtives) {
self.addtives = addtives
}
func makeCoffee() {
}
}
//抽象部分具体实现 大杯
class BigCoffee: Coffee {
override func makeCoffee() {
print("大杯\(addtives.addtives())的咖啡")
}
}
//抽象部分具体实现 中杯
class MediumCoffee: Coffee {
override func makeCoffee() {
print("中杯\(addtives.addtives())的咖啡")
}
}
//抽象部分具体实现 小杯
class SmallCoffee: Coffee {
override func makeCoffee() {
print("小杯\(addtives.addtives())的咖啡")
}
}
//抽象部分:咖啡添加剂 (其实也是需要优化部分的抽象 )
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 "不加糖"
}
}
网友评论