组合模式,命令模式,享元模式,模板方法模式

组合模式

命令模式

class Cooker {
  cook(){
    console.log('做饭')
  }
}
class Cleaner {
  clean(){
    console.log('洗碗')
  }
}
class CookerCommand {
  cooker: Cooker
  constructor(){
    this.cooker = new Cooker()
  }
  execute(){
    this.cooker.cook()
  }
}
class CleanerCommand {
  cleaner: Cleaner
  constructor(){
    this.cleaner = new Cleaner()
  }
  execute(){
    this.cleaner.clean()
  }
}

class Customer {
  command: any
  setCommad(command: any){
    this.command = command
  } 

}

let clean = new CleanerCommand
let cook = new CookerCommand

let cu = new Customer
cu.setCommad(clean)
cu.command.execute()

cu.setCommad(cook)
cu.command.execute()

享元模式

 看图基本就可以明白

class Person {
  constructor(name,age){
    this.name = name,  // 变量存在内部
    this.age = age
  }

  getName(){
    return this.name  //方法存在原型对象上
  }
}


let p1 = new Person('lliu','12')
console.log(p1.getName())
let p2 = new Person('lliu','12')
let p3 = new Person('lliu','12')

console.dir(Person)
console.log(Person.prototype === p1.__proto__)

 

模板方法

 

// class Person {
//   constructor(private name:string,private age:string){
//     this.name = name,  // 变量存在内部
//     this.age = age
//   }

//   getName(){
//     return this.name  //方法存在原型对象上
//   }
// }


// let p1 = new Person('lliu','12')
// console.log(p1.getName())
// let p2 = new Person('lliu','12')
// let p3 = new Person('lliu','12')


// 模板方法


class Person {
  drinner(){
    this.buy()
    this.cook()
    this.eat()
  }
  eat() {
    throw new Error("Method not implemented.")
  }
  buy() {
    throw new Error("Method not implemented.")
  }
  cook() {
    throw new Error("Method not implemented.")
  }
}

class Anderson extends Person {
  buy() {
    console.log('买菜')
  }
  cook() {
    console.log('做饭')
  }
  eat() {
    console.log('吃饭')
  }
}

new Anderson().drinner()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值