寻找一种设计模式,该模式可以创建具有不同接口实现的类的不同实例

齐蒙

我有一个包含视图依赖项(所有接口)的类。基本上,类的行为是通过实现这些接口来定义的。我希望能够有一个“生成器”,它可以使用不同的接口(或部分接口)实现来创建此类的实例。像这样的东西:

public class API
{
 private readonly ISomeInterface _someInterface;
 private readonly ISomeOtherInterface _someOtherInterface;
 private readonly ISomeAnotherInterface _someAnotherInterface;

API(ISomeInterface someInterface,ISomeOtherInterface someOtherInterface,ISomeAnotherInterface someAnotherInterface)
{*/implementation ommitted*/}

//Example method
public void DoSomethingWhichDependsOnOneOrMoreInterfaces()
{
  //somecode
  id(_someInterface != null)
     _someInterface.SomeMethode();
}


public class MyApiBuilder()
{
  // implementation ommitted
  API CreateAPI(someEnum type)
  { 
    switch(type)
    {
       case SpecificAPI32:
            var speficImplementationOfSomeInterface = new ImplementsISomeInterface();
            speficImplementationOfSomeInterface .Setup("someSetup");
            var specificImplementationOfOtherInterface = new ImplementsISomeOtherInterface();
            returns new API(speficImplementationOfSomeInterface,specificImplementationOfOtherInterface ,null);

    }
  }
}

实施此方法的最优雅的方法是什么(如果完全有道理)?我最初想到的是Builder设计模式,但据我了解,它略有不同。

[编辑]如前所述,我实现它的方式是一种工厂方法,但是我对此并不完全满意。该API可以包含各种不同的接口,这些接口可以彼此完全独立,但有些接口可能依赖于其他接口。(但不是强制性的)。我想给用户(使用此“ API”的开发人员)尽可能的自由在创建他要使用的API时。让我们尝试解释一下我的基本工作:假设我正在为游戏引擎开发一个插件,该插件可以将成就和其他内容发布到各种社交媒体渠道。因此,基本上可以有一个接口,用于实现对twitter,facebook,youtube,任何人或某些自定义服务器的访问。此自定义服务器可能需要某种身份验证过程。用户应该能够在启动时以一种很好的方式构建API(嗯,流利的很好。)。

var myTotallyForMyNeedsBuildAPI = API.CreateCustomApi().With(Api.Twitter).And(Api.Facebook).And(Api.Youtube).And(Api.CustomServer).With(Security.Authentification);

我实际上不知道如何使它流利,但是像这样的东西会很好。

梅兰德

最好使用依赖注入,这是为了使程序员能够使用所需的配置组合对象。

检查MEFUnity框架非常适合此工作。

例如,Unity您可以这样编写:

// Introducing an implementation for ISomeInterface
container.Register<ISomeInterface, SomeImplementation>();
// Introducing an implementation for ISomeOtherInterface
container.Register<ISomeOtherInterface, SomeOtherImplementation>();
// Introducing an implementation for ISomeAnotherInterface
container.Register<ISomeAnotherInterface, SomeAnotherImplemenation>();
container.Register<API, API>();

// and finally unity will compose it for you with desired configurations:
var api = container.Resolve<API>();

在这种情况下,api将由所需的实现组成

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我应该如何声明一个接口,该接口具有一种返回不同接口的切片的方法?

是否有一种设计模式支持几种抽象类实现的注入,并有条件地使用注入的bean中的一种

Java如果我具有不同的构造函数但具有相同的接口,则应为对象实例化使用哪种设计模式?

具有不同方法名称的接口实现

实例化实现通用接口实例的所有类

寻找一种持有对类的引用的方式,以便以后可以动态实例化它

C ++中是否有一种设计模式,可以通过统一的函数接口来方便地查询不同类型的数据?

如何使用MVP模式处理不同的接口实现?

两种不同“策略”的设计模式,它们没有实现相同的接口

有没有一种方法可以创建具有不同返回类型的c ++模板?

是否可以创建一个类,其每个实例将具有不同的类型?

有没有一种合适的方法来实现一个子类,该子类具有与Python中其超类不同的方法签名?

有没有一种方法可以定义具有不同名称的实现的函数?

有没有一种干净的方法来定义一个Java接口方法,该方法的每个实现类具有不同的参数?

在一种情况下,如何实现具有明显不同的实现的类?

用于具有不同行为的多个接口的设计模式

Android-有没有一种方法可以清除布局中的所有按钮,然后根据状态类重新插入它们?(状态设计模式)

对于结构不同但功能相似的方法,是否有一种设计模式?

是否有一种设计模式可以强制初始化子类实现的方法?

如果没有可用的公共接口,则使用一个类的两种实现的模式

MvvmCross:具有Decorator模式的IoC,同一接口的两种实现

一种接口方法的不同类型的实现

寻找一种设计模式来填充没有数据库的类

Twisted Python接口实例可以不实现该接口的所有功能吗?

具有不同返回值的一种方法的重构模式

Dagger2 如何@Provide 一种具有两种不同实现的类型

一种模式 - 多张图像,不同的图像集

一种处理具有不同多重性的相似对象分组的设计模式?

是不是不好的模式:确定接口实现的类