外观模式和观察者模式

外观模式

  • 该模式就是把一些复杂的流程封装成一个接口提供给外部用户更简单的使用
  • 门面角色:外观模式的核心,它被客户角色调用,它熟悉子系统的功能,内部根据客户角色的需求灵活处理
  • 子系统角色:实现了子系统的功能,它对客户角色和Facade(外观)是未知的
  • 客户角色:通过调用Facede来完成要实现的功能
class Sum{
    sum(a,b){
        return a+b;
    }
}
class Minus{
    minus(a,b){
        return a-b;
    }
}
class Multiply{
    multiply(a,b){
        return a*b;
    }
}
class Divide{
    divide(a,b){
        return a/b;
    }
}
class Calculator{
    constructor(){
        this.sumObj = new Sum();
        this.minusObj = new Minus();
        this.multiplyObj = new Multiply();
        this.devideObj = new Divide();
    }
    sum(a,b){
        return this.sumObj.sum(a,b);
    }
    minus(a,b){
        return this.minusObj.minus(a,b);
    }
    multiply(a,b){
        return this.multiplyObj.multiply(a,b);
    }
    divide(a,b){
        return this.divideObj.divide(a,b);
    }
}
let calculator = new Calculator();
console.log(calculator.sumObj.sum(1,2))

观察者模式

  • 被观察者提供维护观察者的一系列方法
  • 观察者提供更新接口
  • 观察者把自己注册到被观察者里
  • 在被观察者发生变化的时候,调用观察者的更新方法
class Star{
    constructor(name){
        this.name = name;
        this.state = '';
        this.observers = [];//观察者
    }
    getState(){
        return this.state;
    }
    setState(state){
        this.state = state;
        this.notifyAllObservers();
    }
    //增加一个新的观察者
    attach(observer){
        this.observers.push(observer);
    }
    //通知所有的观察者更新
    notifyAllObservers(){
        if(this.observers.length>0){
            this.observers.forEach(observer=>observer.update());
        }
    }
}
class Fan{
    constructor(name,star){
        this.name = name;
        this.star = star;
        this.star.attach(this)
    }
    update(){
        console.log(this.star.getState())
    }
}
let star = new Star('Tiya');
let f1 = new Fan('zs',star)
star.setState('red')

promise.js

//监听resovle执行then里面传的函数
class Promise{
    constructor(fn){
        this.successes = [];
        let resolve = (data)=>{
            this.successes.forEach(item=>item(data))
        }
        fn(resolve)
    }
    then(success){
        this.successes.push(success);
    }
}
let p = new Promise(function(resolve){
    setTimeout(function(){
        resolve("ok")
    },2000)
})
p.then(()=>{
    console.log('promise then')
})

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值