应用于具有完全相同用法的两组不同类的设计模式

Asa*_*bal 4 design-patterns

我正在编写一些代码来使用一些api的两个不同版本.这些版本中的每一个都在版本化的包中声明,例如{v1.Connection,v1.query,v1.Result}和{v2.Connection,v2.query,v2.result}等.除了类之外,客户端代码将完全相同是不同的.我可以在这里申请什么设计模式?我无法控制api方面.

Jas*_*own 5

我不确定这是否是一个特定的设计模式或设计模式的组合(这些天我真的只知道几个,如状态(机器),策略和其他一些),但使用基本对象面向设计原则我会采用以下方法:

  • 在v1和v2类(包装类(可能是抽象)或接口)上构建一个抽象层
  • 通过构造函数注入或可能通过属性将v1或v2类注入包装类,以便提供各种方法的实际实现等.
  • 使用某种工厂(或者可能是IOC容器)来控制要注入的类的哪个版本.

这使您能够在将来添加更多版本,根据需要更改它们,并保留依赖于抽象的客户端代码,而不是与底层实现耦合.