设计模式 十二 命令模式、中介者模式、策略模式

459 阅读1分钟

1. 命令模式

介绍

命令模式是一种数据驱动的设计模式,它属于行为型模式

image.png

 // 接收者
    class Receiver{
        exec(){
            console.log('执行');
        }
    }
    // 命令者
    class Command{
        constructor(receiver){
            this.receiver = receiver
        }
        cmd(){
            console.log('执行命令');
            this.receiver.exec();
        }
    }
    //触发者
    class Invoker{
        constructor(command){
            this.command = command
        }
        invoke(){
            this.command.cmd()
        }
    }
    // 士兵
    let solider = new Receiver()
    //小号手
    let trumpeter = new Command(solider)
    //将军
    let general = new Invoker(trumpeter)

应用

网页富文本编辑器,浏览器封装一个命令对象

document.execCommand('bold')

验证

命令对象和执行命令对象分离开,解耦,符合开放封闭原则

2. 中介者模式

介绍

用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

image.png

class A{
    constructor(){
        this.number = 0
    }
    setNumber(num,m){
        this.number = num
        // 如果有中介者
        if(m){
            m.setB()
        }
    }
}
class B{
    constructor(){
        this.number = 0
    }
    setNumber(num,m){
        this.number = num
        // 如果有中介者
        if(m){
            m.setA()
        }
    }
}

//中介者
class Mediator{
    constructor(a,b){
        this.a = a
        this.b = b
    }
    setA(){
        this.a.setNumber(this.a.number*1000)
    }
    setB(){
        this.b.setNumber(this.b.number*1000)
    }
}

应用

js 暂无应用

3.策略模式

实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,避免出现大量的if...else

image.png

换成

image.png

验证

不同策略,分开处理,符合开放封闭