如何使用工厂模式解析多个第三方api

How to use factory pattern to resolve multiple third party apis

我一直在研究 API,它基于 PHP 中的 Laravel 框架,但这并不特定于该语言。 API这里使用了一些第三方的API,并且有很多的多重配置。所以我想创建一个 HTTP 客户端工厂 class,在代码中,我计划为此创建一个对象并将 API 名称作为参数传递。主要问题是如何根据特定 API 的名称将其解析为各种 classes?那就是当我给 Google 时,它需要初始化 Google class 和 return Google API 客户端和其他 APIs,它应该响应相应的客户端。

我觉得这是工厂模式的正确用例,如果不是,是否有任何其他模式或标准方法可以执行此操作,而不是分别调用每个 API 客户端。 ?

这里需要结合使用工厂方法和适配器模式。工厂方法将创建您的本机 API classes' 对象(例如 Google 等),适配器将为您提供一个通用接口。所以基本上你会做以下事情:

  • 为您的 API 操作创建适配器接口(列出您需要的所有操作)
  • 实现所有不同API的适配器接口,参考 第三方 API 对象(你需要为每个 API 创建不同的 class)
  • 在你的工厂方法中,你return你的适配器接口的类型。
  • 现在,您可以在调用代码中使用从工厂方法return生成的对象。

下面是 code.This 使用 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);