我要问一个简单的OO设计问题。
想象一下,我们使用接口(IHoo)反转了两个具体类(Foo和Hoo)之间的依赖关系,其中Hoo实现了接口,而Foo使用了该实现。
那时,我想知道我应该把那个实现(Hoo)附加到它的客户端(Foo)。显然,如果我们在客户端类Foo中添加Hoo,那么我们就没有反转编译时依赖性(关于运行时依赖性),而且我们只做了一些模块化代码,但并没有那么严格。
或许,我们将客户端和接口实现关联到主控(或更高级)类,如控制器等?你的方法是什么?
THX。
答案 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一样)你也可以使用工厂。