TypeScript命令模式

abstract class command {

    protected receiver: Receiver = null;

    constructor(receiver: Receiver) {

        YBLog.log("Test", " 父类的构造函数 ");

        this.receiver = receiver

    }

    abstract excute(): void; // 必须在派生类中实现   

}

abstract class Receiver {

    abstract dos(): void; // 必须在派生类中实现     

}

class Receiver1 extends Receiver {

    dos() {

        YBLog.log("Test", " 我是接受者1 ,我做苦力 ");

    }

}

class Receiver2 extends Receiver {

    dos() {

        YBLog.log("Test", " 我是接受者2 ,我做苦力 ");

    }

}

 

class ommandA extends command {

    constructor() {

        YBLog.log("Test", " ommandA 构造函数 ");

        super(new Receiver1());

    }

    excute() {

        this.receiver.dos();

    }

}

class ommandB extends command {

    constructor() {

        YBLog.log("Test", " ommandB 构造函数 ");

        super(new Receiver2());

    }

    excute() {

        this.receiver.dos();

    }

}

 

//调用者 

class Invoker {

    private _command: command = null;

    public setCommand(value: command) {

        YBLog.log("Test", " 58 接受到命令");

        this._command = value;

    }

    public InitiateCall() {

        YBLog.log("Test", " 61 执行命令");

        this._command.excute()

    }

}

 

let invoker:Invoker = new Invoker();

let comma:ommandA = new ommandA();

let commb:ommandB = new ommandB();

invoker.setCommand(comma); //设置命令

invoker.InitiateCall(); //执行

invoker.setCommand(commb);

invoker.InitiateCall();

/**

Test  ommandA 构造函数 

 

Test  父类的构造函数 

 

Test  ommandB 构造函数 

 

Test  父类的构造函数 

 

Test  58 接受到命令

 

Test  61 执行命令

 

Test  我是接受者1 ,我做苦力 

 

Test  58 接受到命令

 

Test  61 执行命令

 

Test  我是接受者2 ,我做苦力 

**/

 

一优点: 解耦   调用者  与  具体的接受者没有 依赖。 功能扩展容易 。

二缺点: 命令会有N个 。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值