JavaScript模板模式

模板模式:

模板模式是由2部分组成,第一部分是抽象父类,第二部分是子类实现,父类是对子类接口方法的定义和实现,而子类需实现父类定义的方法接口,也可以覆盖父类的方法实现。

js中并没有抽象类,那么抽象类是不可以被实例化的,可以这样检查:

1
2
3
4
5
6
7
class Abstract {
constructor() {
if (new.target === Abstract) {
throw new TypeError('不能实例化抽象父类');
}
}
}

同时如果子类没有实现该方法,但是我们可以再父类原型方法中抛错,如:

1
2
3
Parent.prototype.mustBeExtend = function() {
throw new Error('子类必须实现该方法');
}

模板顾名思义,是一个模板,即将子类中的共有的方法抽离出来生成一个父类,并让子类继承该模板父类。

如鸭子会叫,会吃,鸡也会叫,会吃,但是鸭子会游泳,鸡会飞,则会叫,会吃则可以抽离出来,而他们之间的不同则可以由子类自己实现,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Animal {
constructor() {
if (new.target === Animal) {
throw new TypeError('不能实例化抽象父类Animal');
}
}
eat() {
console.log('eat');
}
shout() {
console.log('shout');
}
specific(){
throw new Error('子类必须实现该方法');
}
}

class Duck extends Animal{
specific(){
console.log('游泳');
}
}

class Chicken extends Animal{
specific(){
console.log('会飞');
}
}

在js中,其实很多时候我们选择的是高阶函数来代替模板模式。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!