桥接模式
2019-03-23 本文已影响0人
架构师的一小步
桥接模式定义
- 将抽象和实现部分分离,使他们都可以独立的进行变化
桥接模式解决问题
- 类层级爆炸问题,降低代码复杂度
桥接模式使用场景
- 场景一:开发中面向类层级复杂(爆炸)
- 场景二:对不同的API之间进行桥接
- 场景三:一个类存在两个独立的维度,且这两个维度都需要扩张(至少是两个维度)
桥接模式角色划分
- 抽象部分
- 具体抽象部分(优化的抽象部分)
- 抽象实现部分(需要持有抽象部分的引用)
- 实现部分具体功能
桥接模式原理案例
喝咖啡?
型号:大、中、小杯
配料:加冰、不加冰、加糖、不加糖
- 抽象部分
//
// CoffeeAddtives.swift
// Dream_20180723_Bridge
//
// Created by Dream on 2018/7/23.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
//抽象部分:咖啡添加剂
class CoffeeAddtives: NSObject {
//业务逻辑
func addtives() -> String {
return ""
}
}
- 具体抽象部分(优化的抽象部分)
//
// IceAddtives.swift
// Dream_20180723_Bridge
//
// Created by Dream on 2018/7/23.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
//加冰
class IceAddtives: CoffeeAddtives {
override func addtives() -> String {
return "加冰"
}
}
//
// NonIceAddtives.swift
// Dream_20180723_Bridge
//
// Created by Dream on 2018/7/23.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
//不加冰
class NonIceAddtives: CoffeeAddtives {
override func addtives() -> String {
return "不加冰"
}
}
//
// SugarAddtives.swift
// Dream_20180723_Bridge
//
// Created by Dream on 2018/7/23.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
//加糖
class SugarAddtives: CoffeeAddtives {
override func addtives() -> String {
return "加糖"
}
}
//
// NonSugarAddtives.swift
// Dream_20180723_Bridge
//
// Created by Dream on 2018/7/23.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
//不加糖
class NonSugarAddtives: CoffeeAddtives {
override func addtives() -> String {
return "不加糖"
}
}
- 抽象实现部分
//
// Coffee.swift
// Dream_20180723_Bridge
//
// Created by Dream on 2018/7/23.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
//抽象实现部分:型号
class Coffee: NSObject {
//第一个维度
var addtives:CoffeeAddtives
//第二个维度
//第三个维度
init(addtives:CoffeeAddtives) {
self.addtives = addtives
}
func makeCoffee() {
}
}
- 实现部分具体功能
//
// BigCoffee.swift
// Dream_20180723_Bridge
//
// Created by Dream on 2018/7/23.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
class BigCoffee: Coffee {
override func makeCoffee() {
print("大杯\(addtives.addtives())的咖啡")
}
}
//
// MediumCoffee.swift
// Dream_20180723_Bridge
//
// Created by Dream on 2018/7/23.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
class MediumCoffee: Coffee {
override func makeCoffee() {
print("中杯\(addtives.addtives())的咖啡")
}
}
//
// SmallCoffee.swift
// Dream_20180723_Bridge
//
// Created by Dream on 2018/7/23.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
class SmallCoffee: Coffee {
override func makeCoffee() {
print("小杯\(addtives.addtives())的咖啡")
}
}
调用
//来一杯饮料
let ice = SugarAddtives()
let coffee = BigCoffee(addtives: ice)
coffee.makeCoffee()
输出
大杯加糖的咖啡