Design patterns 对于具有完全相同用法的两组不同的类应用什么设计模式

Design patterns 对于具有完全相同用法的两组不同的类应用什么设计模式,design-patterns,Design Patterns,我正在编写一些代码来使用某些api的两个不同版本。每个版本都在版本化包中声明,例如{v1.Connection,v1.query,v1.Result}和{v2.Connection,v2.query,v2.Result}等。客户端代码将完全相同,但类不同。我可以在这里应用什么设计模式?我在api方面没有控制权 我不确定这到底是一种设计模式还是一种设计模式的组合(现在我只记得几个,比如状态(机器)、策略和其他一些),但使用基本的面向对象设计原则,我会采取以下方法: 在v1和v2类(包装类(可能是

我正在编写一些代码来使用某些api的两个不同版本。每个版本都在版本化包中声明,例如{v1.Connection,v1.query,v1.Result}和{v2.Connection,v2.query,v2.Result}等。客户端代码将完全相同,但类不同。我可以在这里应用什么设计模式?我在api方面没有控制权

我不确定这到底是一种设计模式还是一种设计模式的组合(现在我只记得几个,比如状态(机器)、策略和其他一些),但使用基本的面向对象设计原则,我会采取以下方法:

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

这使您能够在将来添加更多版本,根据需要对其进行更改,并使依赖抽象的客户端代码与底层实现的耦合更少。

这不是策略,因为我无法使原始类从同一个超类继承或实现。因此,除了在版本化api中为每个类创建一个类或接口之外,我似乎没有其他选择。您的设计是有意义的。是的,在代码的某些级别,您仍然需要引用各个版本的api类。您可以将该部分抽象到某个地方,让您的客户机代码与更抽象的层对话,以便在添加新版本时,只需要更改特定于版本的内容。我记得,此模式有一个名称,您可以在包装器后面有不同类型的对象或引用,并且只使用其中一种类型一次。是的,可能有一个名字,我过去经常做这些事情。最近我一直在使用非面向对象语言,所以OO设计模式已经从我的词汇表中消失,进入了我的大脑深处:)大多数设计模式只是解决给定问题的一些“常用”方法的起点,但它们实际上都只是好的OO设计原则的实现。