JS设计模式-07-模版模式

1. 模式

定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
分类:行为型模式

2. 任务

任务:

  1. 泡一杯咖啡和一杯茶
  2. 泡咖啡的步骤通常如下:
    a. 把水煮沸 boilWater
    b. 用沸水冲泡咖啡 brewCoffeeGriends
    c. 把咖啡倒进杯子 pourInCup
    d. 加糖和牛奶 addSugarAndMilk
  3. 泡茶的步骤通常如下:
    a. 把水煮沸 boilWater
    b. 用沸水冲泡茶叶 steepTeaBag
    c. 把茶叶倒进杯子 pourInCup
    d. 加柠檬 addLemon
  4. 试图用代码方式实现
  5. 这两种方式的共性是什么? 有没有优化方案?

3. JS 实现

class FrameWork {
	constructor() {
		//类不能被实例化, 只能用于继承
		if (new.target === FrameWork) {
			throw Error(`pure funtion`);
		}
	}
	boilWater() {
		console.log(`boilWater`);
	}
	pourInCup() {
		console.log(`pourInCup`);
	}
	init() {
		this.boilWater();
		this.brew();
		this.pourInCup();
		this.addSomeThing();
	}
}

class CofferFrameWork extends FrameWork {
	boilWater() {
		//可以理解为重载
		console.log(`boilCofferWater`);
	}
	brew() {
		//可以理解为虚函数的实现
		console.log(`brewCoffeeGriends`);
	}
	addSomeThing() {
		//可以理解为虚函数的实现
		console.log(`addSugarAndMilk`);
	}
}

class TeaFrameWork extends FrameWork {
	brew() {
		//可以理解为虚函数的实现
		console.log(`steepTeaBag`);
	}
	addSomeThing() {
		//可以理解为虚函数的实现
		console.log(`addLemon`);
	}
}

let frameWork = new CofferFrameWork();
frameWork.init();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值