在哪里创建接口实现?

时间:2016-06-27 13:58:50

标签: oop design-patterns interface solid-principles

我要问一个简单的OO设计问题。

想象一下,我们使用接口(IHoo)反转了两个具体类(Foo和Hoo)之间的依赖关系,其中Hoo实现了接口,而Foo使用了该实现。

那时,我想知道我应该把那个实现(Hoo)附加到它的客户端(Foo)。显然,如果我们在客户端类Foo中添加Hoo,那么我们就没有反转编译时依赖性(关于运行时依赖性),而且我们只做了一些模块化代码,但并没有那么严格。

或许,我们将客户端和接口实现关联到主控(或更高级)类,如控制器等?你的方法是什么?

THX。

2 个答案:

答案 0 :(得分:3)

看看composition root的概念。这是所有应该连线的地方。

只有在运行时才知道实现的情况下,可以使用工厂。

答案 1 :(得分:0)

为了补充其他答案,并解决在何处创建界面实现? GRASP Creator pattern说(我已根据您的Hoo背景更改了它):< / p>

  

如果以下一项或多项适用,则类B应负责创建类Hoo的实例:

     
      
  • B的实例包含或合成汇总Hoo
  • 的实例   
  • B
  • Hoo个记录实例的实例   
  • B的实例密切使用Hoo
  • 的实例   
  • B的实例具有Hoo实例的初始化信息,并在创建时传递。
  •   

David Osborne的回答指出(和GRASP Creator一样)你也可以使用工厂。