如何为Typescript中的多个类实现包装类

问题描述 投票:1回答:1

我有多个提供相同功能的API,我想包装它们,所以我只需要处理一个类,以后就可以添加更多API。

我已经做了什么:

class FirstAPI: API {}

class SecondAPI: API {}

class GeneralAPI: API {
  public api: API;

  constructor(type: string){
    if(type === 'first') {
      this.api = new FirstAPI();
    }
    if(type === 'second') {
      this.api = new SecondAPI();
    }
  }


  someMethod(){
    this.api.someMethod();
  }

}

正如您所看到的,我必须不必要地重复我的方法,也必须在General类中手动处理输入和输出类型。

请提出一些更好的/优雅的解决方案,并提供适当的字体支持。

typescript class oop structure
1个回答
1
投票

您当前代码的问题是使用if...else,这违反了OCP(开闭原理)。

这里真正需要的是工厂模式,您将注册所有可以创建的可用API。之后,您可以仅使用密钥相应地创建它们。

例如(仅出于想法)

ApiFactory.register('firstApi', FirstAPI);
ApiFactory.register('secondApi' SecondAPI);
const api: API = ApiFactory.get('firstApi');
api.someMethod();

factory-pattern explained

more explanation on factory-pattern

© www.soinside.com 2019 - 2024. All rights reserved.