我正在使用已提供API的第三方产品。此API的工作原理是创建基类的实现,然后在app.config中指示您要使用的实现。
这个问题是可以在第三方应用程序中拥有多个项目。我想要做的是创建一个实现基类的包装类。这将查看参数,然后查找配置以确定将处理传递给哪个其他类,具体取决于正在使用的项目。这样我们就可以将未来的项目添加到系统中,而无需修改任何现有代码。
public class MyImplementation : ThirdPartyBaseClass
{
public override OnLoad(ThirdPartyType data)
{
//do stuff
}
public override Process(ThirdPartyType data)
{
//do stuff
}
}
大约有15种方法可以被覆盖。基类方法似乎是空的,因为如果你没有覆盖方法就没有任何反应,所以我需要我的包装器能够处理我需要为这个项目使用的类型可能无法实现某些或全部的情况。方法。
有人知道这种情况的合适设计模式吗?
答案 0 :(得分:2)
罗伯特在评论中说,抽象工厂似乎适合这个。 请查看此wiki link和此dofactory link,了解有关此问题的详情。
为了得到更具体的回应,我有些疑惑。 基类的对象是从第三方API获得的。现在,当你说可以在这个工具中有多个项目时,我是否认为你需要使用这个基类来创建你定义的多个“项目”类?
然后,包装类可以具有接口IProject
的对象类型。这应该具有OnLoad
和Process
等所有定义。每种类型的项目都有一个具体的类,最终的实现取决于项目类型。
希望这有助于为您指明方向!
答案 1 :(得分:0)
我认为使用一个好的DI容器(如Autofac)或者甚至是穷人的DI都可以很容易地实现。您可以根据您选择的条件选择在运行时提供的服务,并将其作为通过构造函数注入实现第三方API类的具体实现。
答案 2 :(得分:0)
Decorator Pattern可能会与Abstract Factory模式一起帮助您。我建议一个装饰器(你在app.config
中配置的实现),它使用一个具体的工厂(取决于当前的配置)来获得装饰器的inner
。
如果您想同时使用多个实施,您可能还会考虑使用Composite Pattern将调用委托给多个inner
。