我一直在研究基于PHP中的Laravel框架的API,但这不是特定于该语言的。 API中使用了许多第三方API,并且具有多种配置。所以我想创建一个HTTP客户端工厂类,在代码中,我打算为此创建一个对象并将API名称作为参数传递。主要问题是如何根据特定API的名称将其解析为各种类?那是当我给谷歌时,它需要初始化谷歌类并返回谷歌API客户端,对于其他API,它应该响应相应的客户端。
我有一个混乱,比如这是工厂模式的正确用例,如果不是,是否有其他模式或标准方法来执行此操作,而不是分别调用每个API客户端。?
答案 0 :(得分:2)
在这里,您需要结合使用Factory Method和Adapter模式。 Factory方法将创建您的本机API类'对象(例如Google等)和适配器将为您提供通用界面。所以基本上你做了以下几点:
下面是示例代码。这是使用C#。您可以对以下代码进行一些修改。
public interface IApiAdapter
{
void Read(int id);
void Write(string data);
}
public class GoogleApiAdapter : IApiAdapter
{
private GoogleApiClass _googleApiClass;
public void Read(int id)
{
//some additional work
//call google api
_googleApiClass.readSomeData(id);
}
public void Write(string data)
{
//some additional work
//call google api
_googleApiClass.writeSomeData(data);
}
}
public class FacebookApiAdapter : IApiAdapter
{
private FacebookApiClass _facebookApiClass;
public void Read(int id)
{
//some additional work
//call facebook api
_facebookApiClass.readSomeData(id);
}
public void Write(string data)
{
//some additional work
//call facebook api
_facebookApiClass.writeSomeData(data);
}
}
public class ApiFactory
{
public static IApiAdapter GetApiFactory(string type)
{
if(type == "google")
{
return new GoogleApiAdapter();
}
if(type == "facebook")
{
return new FacebookApiAdapter();
}
}
}
//calling code
IApiAdapter api = ApiFactory.GetApiFactory("google");
api.Read(2);