我只是在学习设计模式,我不知道在下面的代码中抽象的好处是什么:我重写代码并且仍然按照我们想要的方式工作。
您可以从这里中看到原始代码
class Creator {
public factoryMethod() {}
public someOperation(): string {
const product = this.factoryMethod();
return `Creator: The same creator's code has just worked with ${product}`;
}
}
class ConcreteCreator1 extends Creator {
public factoryMethod(): string {
return '{Result of the ConcreteProduct1}';
}
}
class ConcreteCreator2 extends Creator {
public factoryMethod(): string {
return '{Result of the ConcreteProduct2}';
}
}
function clientCode(creator: Creator) {
console.log(
"Client: I'm not aware of the creator's class, but it still works."
);
console.log(creator.someOperation());
}
console.log('App: Launched with the ConcreteCreator1.');
clientCode(new ConcreteCreator1());
console.log('');
console.log('App: Launched with the ConcreteCreator2.');
clientCode(new ConcreteCreator2());发布于 2022-09-19 20:39:21
比较您的代码和原始代码,您已经将abstract class Creator更改为一个具体的class Creator。这意味着您现在可以通过调用new Creator()来实例化这个类。
问题是您的基类Creator类还没有真正实现factoryMethod()方法。您已经将它变成了一个不执行任何操作并返回void的具体方法。当您调用clientCode(new Creator());时,您将得到一个不是您想要的输出:
"Creator:同一个创建者的代码刚刚处理了未定义的“
为什么我们使用抽象类
abstract class Creator {
public abstract factoryMethod(): Product;
/* ... */原始代码示例使用abstract class Creator来建立所有具体创建者必须履行的契约。它说:“为了成为一个Creator__,您必须有一个返回Product__的factoryMethod”。
extend Creator 必须实现 factoryMethod 方法的所有具体类。但是基本的abstract class Creator 不需要实现它。
缺少的实现不是问题,因为不能实例化抽象类。因此,不可能有缺少factoryMethod的Creator实例。
https://stackoverflow.com/questions/72070693
复制相似问题