gpt4 book ai didi

php - 策略还是适配器模式?

转载 作者:可可西里 更新时间:2023-11-01 13:39:50 26 4
gpt4 key购买 nike

我想为每个 Virtual Server Provider 创建一些类,例如:

  • digital ocean
  • Linode
  • 亚马逊 AWS

每个提供者都有自己的 PHP 类(通过 composer)来使用他们的 API 接口(interface),我想使用他们的类库,但我想确保我可以为每个提供者使用相同的方法。例如关闭 VPS:

  • Linode API 方法:powerOff()
  • digital ocean API 方法:haltServer()

而不是使用 powerOff()haltServer() - 我想对我将创建的任何提供程序类使用 shutdown() 方法.我应该使用策略设计还是适配器模式?

最佳答案

Should I use Strategy design or Adaptor pattern?

这是每个人(包括我自己)在设计应用程序时都会犯的典型错误。您理想情况下不应该浏览可用设计模式列表并选择最适合您的问题的模式。相反,您应该提出一个初始类设计,然后尝试确定最能描述您的设计的模式。这可以防止您过度设计,即创建不需要的不必要组件。随着时间的推移,您很快就会拥有实际使用过的设计模式词汇表,而不是尝试使用特定设计模式的应用程序。

撇开设计模式不谈,您正在寻找的似乎是一种提供通用接口(interface)的方法,可以使用不同的底层库/方法来执行相同的功能。这听起来很像抽象委托(delegate)

您可以通过定义一个名为Provider 的通用接口(interface)来实现抽象,并使用标准操作方法,例如shutdownconnectretry 等。然后您可以为每种类型的提供程序创建一个具体的提供程序类,例如 AWSProviderLinodeProvider 并实现 shutdownconnectretry 方法。然后,您可以通过在这些方法中调用提供商特定的 API 来使用Delegation。例如,在LinodeProvider类的shutdown方法中调用powerOff方法。

如果您现在仔细查看您的设计,您将开始意识到它看起来像Strategy 以及Aadpter 模式。这两种模式的区别在于抽象发挥作用的时间点。如果您决定在应用程序运行时通过工厂 使用Provider 实现,那么您就是在使用Strategy 模式;但是,如果这个决定是在编译时做出的,那么您正在使用 Adapter 模式。除了模式的名称之外,您的类看起来几乎相同。

这种方法的优点是您不仅确定了正确的模式,而且还通过使用诸如命令 模式等模式来保护自己免于过度设计应用程序。

关于php - 策略还是适配器模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41558104/

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