gpt4 book ai didi

java - 这种一对类的情况是否有设计模式?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:41 28 4
gpt4 key购买 nike

这个问题在我的项目中经常出现。例如,假设我有两个接口(interface),一个从 API 检索信息,另一个解析此信息。

public interface APIClient {...}

public interface APIParser {...}

现在,我可能需要不同的 API,因此我将有许多 APICLient 实现,但每个实现都需要自己的 APIParser

这会导致这种类型的结构

public class APIClientA implements APIClient {...}
public class APIParserA implements APIParser {...}

public class APIClientB implements APIClient {...}
public class APIParserB implements APIParser {...}

...
...

所以,一般来说,这意味着每次我想添加一种新类型的 API 时,我都必须为同一类型创建多个类,并确保它们只相互通信,而不是与其他类型 API 的实现。

这看起来与 Bridge 设计模式提出的非常相似,但这种模式将允许任何 APIClient 使用任何 APIParser(我说得对吗?)

那么,有没有更好的解决方案呢?或者也许这很好,没有必要重构它。

此外,也许 parse 不是正确的词,对不起我的英语,但我的意思是分析 JSON/XML 响应以便从中获取具体信息。我分析每个响应的方式取决于每个 API 提供的结构,所以这就是为什么我需要不同的“解析器”

编辑:

我将稍微扩展一下这个想法。有一个客户端类使用 APIClient 来发出请求,带有给定类型的参数。一旦请求遇到 JSON 响应,客户端就会使用相应的 APIParser 来获取有关响应的特定信息。

public class ClientClass {

...
json = APIClientTypeA.makeRequest(city, day, ...);
temperature = APIParserTypeA.getTemperature(json);
...

}

这里的问题是客户端需要确保使用正确的 APIClient 和 APIParser 实现(它们必须匹配)

最佳答案

您的要求似乎与 Abstract Factory 非常匹配GoF模式,因为一旦您创建了一个具体的工厂并且您的代码仅通过该工厂实例化客户端和解析器,就不可能错误地获得一组不匹配的客户端/解析器实例。

AbstractFactory 是您的客户端用来实例化客户端/解析器对的对象:

interface AbstractFactory {
APIParser createAPIParser();
APIClient createAPIClient();
}

interface APIParser {}
interface APIClient {}

具体工厂可以提供匹配对(您可以重用产品实例,但我保持简单):

class ConcreteFactoryA implements AbstractFactory {

public APIParser createAPIParser() { return new APIParserA(); }
public APIClient createAPIClient() { return new APIClientA(); }
}

class ConcreteFactoryB implements AbstractFactory {

public APIParser createAPIParser() { return new APIParserB(); }
public APIClient createAPIClient() { return new APIClientB(); }
}

为完整起见,这里是具体产品的声明:

class APIParserA implements APIParser {}
class APIParserB implements APIParser {}
class APIClientA implements APIClient {}
class APIClientB implements APIClient {}

示例客户端代码:

AbstractFactory factory = new ConcreteFactoryA();
APIClient client = factory.createAPIClient();
APIParser parser = factory.createAPIParser();

关于java - 这种一对类的情况是否有设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56945587/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com