以委托取代子类,代码样例
时间: 2024-02-18 07:30:40 浏览: 111
好的,关于以委托取代子类的代码样例,我可以给您举一个简单的例子:
```
class Animal {
walk() {
console.log("Animal is walking");
}
}
class Dog extends Animal {
bark() {
console.log("Dog is barking");
}
}
class ServiceDog extends Dog {
performTask() {
console.log("Service dog is performing task");
}
}
// 使用以委托取代子类的方式
class ServiceAnimal {
constructor(animalType) {
this.animal = animalType;
}
walk() {
this.animal.walk();
}
performTask() {
console.log("Service animal is performing task");
}
}
let animalType = new Animal();
let dogType = new Dog();
let serviceDogType = new ServiceDog();
// 使用继承的方式调用
animalType.walk(); // Animal is walking
dogType.walk(); // Dog is walking
dogType.bark(); // Dog is barking
serviceDogType.walk(); // Animal is walking
serviceDogType.bark(); // Dog is barking
serviceDogType.performTask();// Service dog is performing task
// 使用委托的方式调用
let serviceAnimalType = new ServiceAnimal(animalType);
serviceAnimalType.walk(); // Animal is walking
serviceAnimalType.performTask();// Service animal is performing task
let serviceDogAsAnimal = new ServiceAnimal(dogType);
serviceDogAsAnimal.walk(); // Dog is walking
serviceDogAsAnimal.performTask();// Service animal is performing task
```
这里通过创建一个 `ServiceAnimal` 类,在构造函数中传入不同的动物类型来实现以委托取代子类的方式。在 `ServiceAnimal` 类中重新实现了 `walk()` 方法,并新增了 `performTask()` 方法,代替了原本 `ServiceDog` 类中的方法。同时,`ServiceAnimal` 类也是可以扩展的,只需要新增方法即可。
阅读全文