设计模式之外观模式

外观模式


// 这个是外观模式
class Add {
    add(a: number, b: number) {
        return a + b;
    }
}

class Reduce {
    reduce(a: number, b: number) {
        return a - b;
    }
}

class Ride {
    ride(a: number, b: number) {
        return a * b;
    }
}

class Except {
    except(a: number, b: number) {
        return a / b;
    }
}

// 这个是 给外部使用的类
class Calculator {
    addObj;
    reduceObj;
    rideObj;
    exceptObj;
    constructor() {
        this.addObj = new Add();
        this.reduceObj = new Reduce();
        this.rideObj = new Ride();
        this.exceptObj = new Except();
    }
    // 然后调用这些方法
    add1(a: number, b: number) {
        return this.addObj.add(a, b);
    }

    reduce1(a: number, b: number) {
        return this.reduceObj.reduce(a, b);
    }

    ride1(a: number, b: number) {
        return this.rideObj.ride(a, b);
    }

    except1(a: number, b: number) {
        return this.exceptObj.except(a, b);
    }
}

let _calculator =  new Calculator();

console.log(_calculator.add1(1,2))

外观模式可以看一下, 下面的图片
外观模式: 该模式就是把一些复杂的流程封装成一个接口提供给外部用户更简单的使用
在这里插入图片描述
观察者模式

class Star {
    objName;
    state;
    observers: any = [];
    constructor(name: string) {
        this.objName = name;
        this.state = "";
        this.observers = [];  //粉丝数目
    }

    getState() {
        return this.state;
    }

    setState(state: string) {
        this.state = state;
        this.notifyAllObserver();
    }
    // 增加一个新的观察者
    attach(observer: any) {
        this.observers.push(observer);
    }
    notifyAllObserver() {
        if(this.observers.length > 0) {
            this.observers.forEach((items: any) => items.updated())
        }
    }
}

class Fan {
    objName;
    objStar;
    constructor(name: string, star: Star) {
        this.objName = name;
        this.objStar = star;
        this.objStar.attach(this);
    }
    updated() {
        console.log(`我是粉丝${this.objName}, 我也是${this.objStar.getState()}`);
    }
}

let star = new Star("明星");
let fans = new Fan("1号", star);


star.setState("绿色");
console.log("明星", star.getState());

其实观察者模式跟我们的发布订阅 模式差不多了,都是去监听 被观察者的值 做出相应的变化

发布-订阅模式 去这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值