如何在 Typescript 中为多个 classes 实现包装器 class
How to implement a wrapper class for multiple classes in Typescript
我有多个 API 来提供相同的功能,我想将它们包装起来,所以我只需要处理一个 class,以后可以添加更多 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();
}
}
如您所见,这样做我不得不不必要地重复我的方法,而且我还必须在常规 class 中手动处理输入和输出类型。
请建议一些 better/elegant 具有适当类型支持的解决方案。
您当前代码的问题是使用 if...else
违反了 OCP(开闭原则)。
这里您真正需要的是工厂模式,您将注册所有可以创建的可用 API。之后,您可以使用密钥相应地创建它们。
例如(仅供参考)
ApiFactory.register('firstApi', FirstAPI);
ApiFactory.register('secondApi' SecondAPI);
const api: API = ApiFactory.get('firstApi');
api.someMethod();
我有多个 API 来提供相同的功能,我想将它们包装起来,所以我只需要处理一个 class,以后可以添加更多 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();
}
}
如您所见,这样做我不得不不必要地重复我的方法,而且我还必须在常规 class 中手动处理输入和输出类型。
请建议一些 better/elegant 具有适当类型支持的解决方案。
您当前代码的问题是使用 if...else
违反了 OCP(开闭原则)。
这里您真正需要的是工厂模式,您将注册所有可以创建的可用 API。之后,您可以使用密钥相应地创建它们。
例如(仅供参考)
ApiFactory.register('firstApi', FirstAPI);
ApiFactory.register('secondApi' SecondAPI);
const api: API = ApiFactory.get('firstApi');
api.someMethod();