我有多个提供相同功能的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类中手动处理输入和输出类型。
请提出一些更好的/优雅的解决方案,并提供适当的字体支持。
您当前代码的问题是使用if...else
,这违反了OCP(开闭原理)。
这里真正需要的是工厂模式,您将注册所有可以创建的可用API。之后,您可以仅使用密钥相应地创建它们。
例如(仅出于想法)
ApiFactory.register('firstApi', FirstAPI);
ApiFactory.register('secondApi' SecondAPI);
const api: API = ApiFactory.get('firstApi');
api.someMethod();