持续创作,加快成长!这是我参加「日新计划 6 月更文应战」的第26天,点击检查活动详情


前语

在面向目标的开发过程中,其实我们或多或少的都接触过一些规划形式,可能知道或不知道其对应的称号,也不知道其具体运用场景,今日我们就来说说几种常见的规划形式,帮助你们在开发过程中,更加得心应手。

正文

中介者形式

解说:

简略来说,假如有多个目标和类之间有通信关系,那么想要下降他们之间的耦合,就需求一个中介类,该类就是处理不同类之间的通信,并支撑松耦合,使代码易于保护。

在实际国际中,飞机驾驶员们在接近或离开机场时不会直接相互沟通。但他们塔台中的空管员通话。假如没有空管员,驾驶员就需求留意机场附近的一切飞机,并与数十位飞行员组成的委员会评论下降次序。这样就会形成非常紊乱的场景。

而塔台中的空管就相当于中介者,由它去向理起飞和落下的次序。

下面我们来看看一个简略的示例代码。

首要界说一个谈天者ChatUser的类

它有两个属性,一个是谈天者的称号,另一个是中介者mediator

同样这个类里面实现了发送音讯和承受音讯的办法。

class ChatUser {
    let name: String
    weak var mediator: ChatMediator?
    init(name: String, mediator: ChatMediator) {
        self.name = name
        self.mediator = mediator
    }
    func send(msg: String) {
        print("(name):发送音讯 = (msg)")
        mediator?.sendMessage(msg: msg, user: self)
    }
    func receive(msg: String) {
        print("(name):收到音讯:(msg)")
    }
}

然后我们来看看中介者类如何实现的。

这个类里面界说了一个装谈天者的数组,经过函数add添加,同时也界说了一个函数sendMessage,用来将users数组中的谈天者进行挑选然后让每个谈天者实例调用receive办法,承受到音讯

class ChatMediator {
    private var users: [ChatUser] = []
    func sendMessage(msg: String, user: ChatUser) {
        users.filter { (it) -> Bool in
            return it.name != user.name
        }.forEach { (it) in
            it.receive(msg: msg)
        }
    }
    func add(user: ChatUser) {
        self.users.append(user)
    }
}

最终我们来看看运用和输出

let mediator = ChatMediator()
var john = ChatUser(name: "John", mediator: mediator)
mediator.add(user: ChatUser(name: "Alice", mediator: mediator))
mediator.add(user: ChatUser(name: "Bob", mediator: mediator))
john.send(msg: "Hi everyone!")
John:发送音讯 = Hi everyone!
Alice:收到音讯:Hi everyone!
Bob:收到音讯:Hi everyone!

能够看到当john.send(msg: "Hi everyone!")发送时 AliceBob都收到了音讯。

结语

中介者形式适合运用场景

  • 当一些目标和其他目标严密耦合致使难以对其进行修正时,可运用中介者形式。
  • 当组件因过于依赖其他组件而无法在不同运用中复用时,可运用中介者形式。
  • 假如为了能在不同情景下复用一些根本行为,导致你需求被逼创立大量组件子类时,可运用中介者形式。

中介者形式优缺点

优点

  • 单一职责原则。你能够将多个组件间的沟通抽取到同一方位,使其更易于了解和保护。

  • 开闭原则。你无需修正实际组件就能添加新的中介者。

  • 你能够减轻运用中多个组件间的耦合情况。

  • 你能够更方便地复用各个组件。

缺点

  • 过一段时间后 可能会成为了解过多或许负责过多的目标

扩展阅读 下面还有其他形式

创立型-工厂形式

创立型-制作者形式

结构型-适配器形式

结构型-桥接形式

结构型-组合形式

结构型-装修器形式

结构型-外观形式