命令模式二

接收者 TerisMachine

class TerisMachine: NSObject {
    func toLeft() {
        print("向左")
    }
    func toRight() {
        print("向右")
    }
    func toTransform() {
        print("变形")
    }
}

命令接口 TMCommandProtocol

protocol TMCommandProtocol {
    func execute()
}

命令

class TMLeftCommand: TMCommandProtocol {
    private var tm : TerisMachine;
    init(tm:TerisMachine) {
        self.tm = tm;
    }
    
    func execute() {
        self.tm.toLeft();
    }
}
class TMRightCommand: TMCommandProtocol {
    private var tm : TerisMachine;
    init(tm:TerisMachine) {
        self.tm = tm;
    }
    
    func execute() {
        self.tm.toRight();
    }
}
class TMTransformCommand: TMCommandProtocol {
    private var tm : TerisMachine;
    init(tm:TerisMachine) {
        self.tm = tm;
    }
    
    func execute() {
        self.tm.toTransform();
    }
}

请求者 TerisMachineManager

class TerisMachineManager: NSObject {
    
    private var left    : TMLeftCommand;
    private var right   : TMRightCommand;
    private var transform : TMTransformCommand;
    private var tm : TerisMachine;
    private var commont  = Array<TMCommandProtocol>();

    init(tm:TerisMachine,left:TMLeftCommand,right:TMRightCommand,transform:TMTransformCommand) {
        self.tm = tm;
        self.left = left;
        self.transform = transform;
        self.right = right;
    }
    
    //具体的业务逻辑
    func toLeft() {
        self.left.execute();
        self.commont.append(TMLeftCommand(tm: self.tm));
    }
    func toRight() {
        self.right.execute();
        self.commont.append(TMRightCommand(tm: self.tm));
    }
    func toTransform() {
        self.transform.execute();
        self.commont.append(TMTransformCommand(tm: self.tm));
    }
    
    func undo() {
        print("撤销")
        if self.commont.count > 0 {
            self.commont.removeLast().execute();
            
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【学习难度:★★★☆☆,使用频率:★★★★☆】直接出处:命令模式梳理和学习:https://github.com/...
    BruceOuyang阅读 843评论 0 3
  • 目录 本文的结构如下: 什么是命令模式 为什么要用该模式 模式的结构 代码示例 优点和缺点 适用环境 模式应用 总...
    w1992wishes阅读 1,143评论 2 9
  • 前言 由于设计模式-命令模式(一)中讲到,如果类太多导致很多冗余,并且增加工作量及不利于维护等,在本次讲中我们需要...
    成绩是汗阅读 224评论 0 0
  • 1.初识命令模式 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及...
    王侦阅读 730评论 0 2
  • 正说着,大明白在一栋二层小楼前停住了脚步,非常老练的推门就进。二狗神情恍惚的只知道跟从,一进门才发现屋里的窗子全都...
    南墙下阅读 254评论 0 0