外观模式
- 该模式就是把一些复杂的流程封装成一个接口提供给外部用户更简单的使用
- 门面角色:外观模式的核心,它被客户角色调用,它熟悉子系统的功能,内部根据客户角色的需求灵活处理
- 子系统角色:实现了子系统的功能,它对客户角色和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')
})