Swift World:设计模式-命令
从今天开始,我们将讨论专注于对象之间通信的行为模式。 它包括命令,中介,观察者,状态,策略等。
在本文中,我们将介绍命令模式。 就像在现实世界中一样,命令是从其调用者(即调用者)发送到接收者的请求。 通过隔离和封装请求,此模式将调用方和接收方分开,如下图所示。
从命令模式— Wikipedia
那它给我们带来什么好处呢? 让我们从车上的故事开始吧。
protocol Car {
func move ()
}
class Sedan : Car {
func move () {
print ("Sedan is moving.")
}
}
class SUV : Car {
func move () {
print ("SUV is moving.")
}
}
现在,您作为iOS应用开发者,拥有一辆轿车并每天开车。
class Developer {
let sedan = Sedan ()
func driveCar () {
sedan .move ()
}
}
一天,您从App Store赚了很多钱,就买了另一辆SUV。 如果要驱动它,则需要在类中添加一个实例。
class Developer {
let sedan = Sedan ()
let suv = SUV ()
func driveSedan () {
sedan .move ()
}
func driveSUV () {
suv .move ()
}
}
但是,如果您的应用变得流行起来,有一天让您成为百万富翁怎么办? 您有很多好车,您的班级变得ated肿。 这是命令模式的放映时间。
protocol Command {
func execute ()
}
class MovementCommand : Command {
var car: Car
init (car: Car ) {
self. car = car
}
func execute () {
car .move ()
}
}
在命令中,我们放入了汽车,它是接收器,并请求使汽车行驶。 然后,您要做的就是用命令实例替换所有汽车。
class Developer {
var command: Command
init (command: Command ) {
self. command = command
}
func drive () {
command .execute ()
}
}
让我们看看如何使用它。
let sedan = Sedan ()
let sedanMovementCommand = MovementCommand (car: sedan)
let suv = SUV ()
let suvMovementCommand = MovementCommand (car: suv)
let developer = Developer (command: sedanMovementCommand)
developer .drive ()
命令模式在iOS应用开发中非常流行,以至于有一个特定的类NSInvocation来帮助创建命令。 您可以参考其文档以获取详细说明。 即使它在Swift中不可用,我们也可以将其作为命令模式的示例。