以下是使用工厂模式编写猫类、狗类和人类的示例代码(JavaScript):
// 产品类 Animal
abstract class Animal {
abstract speak(): string;
}
// 具体产品类 Cat
class Cat extends Animal {
speak() {
return 'Meow';
}
}
// 具体产品类 Dog
class Dog extends Animal {
speak() {
return 'Woof';
}
}
// 具体产品类 Human
class Human extends Animal {
speak() {
return 'Hello';
}
}
// 工厂类 AnimalFactory
class AnimalFactory {
createAnimal(animalType: string): Animal | null {
switch (animalType) {
case 'cat':
return new Cat();
case 'dog':
return new Dog();
case 'human':
return new Human();
default:
return null;
}
}
}
使用示例:
// 创建一个动物工厂
const factory = new AnimalFactory();
// 创建一只猫
const cat = factory.createAnimal('cat');
console.log(cat?.speak()); // 输出:Meow
// 创建一只狗
const dog = factory.createAnimal('dog');
console.log(dog?.speak()); // 输出:Woof
// 创建一个人
const human = factory.createAnimal('human');
console.log(human?.speak()); // 输出:Hello
在此示例中,使用了抽象类 Animal 来表示具体的产品,每个具体产品(Cat、Dog 和 Human)都继承自 Animal 并实现它们的 speak 方法。工厂类 AnimalFactory 根据传入的参数来创建相应的产品。这种方式使得工厂可以根据需要创建不同类型的产品,并且可以方便地增加新的产品或工厂。注意在 TypeScript 中,使用了可选链操作符 ?. 来访问 speak 方法以避免空引用错误。