design-patterns - 设计模式; 具有不同方法的类,它们的行为可能不同,这取决于多种事物
问题描述
我需要创建一个系统来与我们客户的不同系统进行通信。将有一个域层进行不同的计算,但为了简单起见,我们只使用一个名为“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 等)创建一个类,这感觉很愚蠢。
您对此解决方案有何建议,或者我可以使用任何设计模式。我希望我能解释一下情况。如果有什么我遗漏或没有解释清楚,请告诉我。谢谢你。
解决方案
我认为您需要Strategy 模式。在策略模式中,您可以针对不同的情况切换不同的实现。
推荐阅读
- c# - Xamarin.Forms UWP - 登录时启动应用
- reactjs - 将工作的 React cosmosdb 应用程序从本地部署到 Azure
- php - PHP:接收空白电子邮件
- python - 如何在不将其作为参数传递给 python 类的情况下引用对象变量
- c++ - 这个星号 (*) 在 C++ 中的含义是什么?-- 指向成员的指针
- python - python:如何确定一个值是否包含在二维列表的某一列中?
- javascript - 更改 img 并保存 cookie html & javascript
- ubuntu - 如何使用 Ubuntu 在 electron.dialog.showOpenDialog 中查看自定义书签?
- meteor - Meteor + Apollo 订阅:Websocket 连接关闭
- android - 如何在两个布局上放置叠加图像视图?