首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工厂方法设计模式打字稿

工厂方法设计模式打字稿
EN

Stack Overflow用户
提问于 2022-04-30 17:30:56
回答 1查看 61关注 0票数 0

我只是在学习设计模式,我不知道在下面的代码中抽象的好处是什么:我重写代码并且仍然按照我们想要的方式工作。

您可以从这里中看到原始代码

代码语言:javascript
复制
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());
EN

回答 1

Stack Overflow用户

发布于 2022-09-19 20:39:21

比较您的代码和原始代码,您已经将abstract class Creator更改为一个具体的class Creator。这意味着您现在可以通过调用new Creator()来实例化这个类。

问题是您的基类Creator类还没有真正实现factoryMethod()方法。您已经将它变成了一个不执行任何操作并返回void的具体方法。当您调用clientCode(new Creator());时,您将得到一个不是您想要的输出:

"Creator:同一个创建者的代码刚刚处理了未定义的“

为什么我们使用抽象类

代码语言:javascript
复制
abstract class Creator {
    public abstract factoryMethod(): Product;
/* ... */

原始代码示例使用abstract class Creator来建立所有具体创建者必须履行的契约。它说:“为了成为一个Creator__,您必须有一个返回Product__的factoryMethod”。

extend Creator 必须实现 factoryMethod 方法的所有具体类。但是基本的abstract class Creator 不需要实现它。

缺少的实现不是问题,因为不能实例化抽象类。因此,不可能有缺少factoryMethod的Creator实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72070693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档