【问题标题】:Where to create interface implementation?在哪里创建接口实现?
【发布时间】:2016-10-29 13:59:55
【问题描述】:

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

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

那时,我想知道我应该在哪里将该实现( Hoo )附加到它的客户端( Foo )。显然,如果我们在客户端类 Foo 中添加 Hoo,那么我们并没有反转编译时依赖(相对于运行时依赖),我们只是做了一些更模块化的代码,而不是更严格的代码。

所以也许,我们将客户端和接口实现关联在一个主(或更高级别)类中,如控制器之类的?你的方法是什么?

谢谢。

【问题讨论】:

标签: oop design-patterns interface solid-principles


【解决方案1】:

看看composition root 的概念。这是所有东西都应该连接起来的地方。

工厂可用于仅在运行时才知道实现的情况。

【讨论】:

  • 我去看看再回给你。
【解决方案2】:

为了补充其他答案,并解决在哪里创建接口实现?的问题,GRASP Creator pattern 说(我已根据您的 Hoo 上下文对其进行了更改):

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

  • B 的实例包含或组合聚合了Hoo 的实例
  • B 的实例记录Hoo 的实例
  • B 的实例紧密使用Hoo 的实例
  • B 的实例具有Hoo 实例的初始化信息,并在创建时传递它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2020-02-03
    • 2023-04-08
    • 2011-11-14
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多