【问题标题】:Design pattern; a class with different methods and they could behave differently depends on multiple things设计模式;具有不同方法的类,它们的行为可能不同,这取决于多种事物
【发布时间】:2019-02-19 15:18:44
【问题描述】:

我需要创建一个系统来与我们客户的不同系统进行通信。将有一个域层进行不同的计算,但为了简单起见,我们只使用一个名为“GenerateToken”的函数,它具有创建访问令牌的算法。

我们有不同类型的客户使用不同版本的 API。为了便于形象化,我将尝试用一个例子来解释:

1.Company A is X type of customer – uses API v.1.0
2.Company B is X type of customer – uses API v.1.1
3.Company C is Y type of customer – uses API v.2.0
4.Company D is Z type of customer – uses API v.1.0
5.Company E is X type of customer – uses API v.1.1
6.Company F is Z type of customer – uses API v.2.0

如果API版本和公司类型相同,则表示生成令牌的方式相同。例如; “GenerateToken”函数将采用相同的参数,并且在示例中的第 2 和第 5 种情况下具有相同的算法。 “GenerateToken”只是一个例子,未来会有更多的计算,这意味着设计的可扩展性(开放关闭原则)是最重要的事情之一。

我的问题是我无法决定应该采用哪种架构或设计模式。我可以使用“GenerateToken”创建一个父类,然后从子函数(多态)中覆盖它,或者使用类似于“工厂方法模式”的东西。但是在这些情况下,我需要为几乎每个公司类型的 API 版本(TypeXApiV1.0、TypeXApiV1.1、TypeYApiV1.0 等)创建一个类,这感觉很愚蠢。

您对这个解决方案有什么建议,或者有什么我可以使用的设计模式。我希望我能解释一下情况。如果有什么我遗漏或没有解释清楚,请告诉我。谢谢。

【问题讨论】:

  • 您能否详细说明为什么需要在运行时切换,而不是让不同(编译时)版本的 API 并排放置?

标签: design-patterns architecture software-design


【解决方案1】:

我认为您需要Strategy pattern。在策略模式中,您可以针对不同的情况切换不同的实现。

【讨论】:

  • 是的,策略模式看起来是解决这类问题的好方法。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
相关资源
最近更新 更多