模板模式是:抽象父类定义了子类需要重写的相关方法。并且这些方法,仍然是通过父类方法调用的。
专注前端与算法的系列干货分享。 引用请声明:xxoo521.com | 「公众号:心谭博客」
模板模式是:抽象父类定义了子类需要重写的相关方法。并且这些方法,仍然是通过父类方法调用的。
根据描述,父类提供了“模板”并决定是否调用,子类进行具体实现。
一些系统的架构或者算法骨架,由“BOSS”编写抽象方法,具体的实现,交给“小弟们”实现。
而用不用“小弟们”的方法,还是看“BOSS”的心情。
Animal
是抽象类,Dog
和Cat
分别具体实现了eat()
和sleep()
方法。
Dog
或Cat
实例可以通过live()
方法调用eat()
和sleep()
。
注意:Cat
和Dog
实例会被自动添加live()
方法。不暴露live()
是为了防止live()
被子类重写,保证父类的控制权。
class Animal {
constructor() {
// this 指向实例
this.live = () => {
this.eat();
this.sleep();
};
}
eat() {
throw new Error("模板类方法必须被重写");
}
sleep() {
throw new Error("模板类方法必须被重写");
}
}
class Dog extends Animal {
constructor(...args) {
super(...args);
}
eat() {
console.log("狗吃粮");
}
sleep() {
console.log("狗睡觉");
}
}
class Cat extends Animal {
constructor(...args) {
super(...args);
}
eat() {
console.log("猫吃粮");
}
sleep() {
console.log("猫睡觉");
}
}
/********* 以下为测试代码 ********/
// 此时, Animal中的this指向dog
let dog = new Dog();
dog.live();
// 此时, Animal中的this指向cat
let cat = new Cat();
cat.live();