需要帮助定义类职责

时间:2011-08-26 03:18:14

标签: oop language-agnostic

我目前正在自己​​学习书本和网站的OOP。我正处于我需要练习的地步。我开始了一个小项目,我知道如何以程序的方式做。但是当我尝试以OOP方式进行操作时,它给我留下了一些问题。

我的项目概念是这样的。我想在工作中组织/存档/管理我们系统的互连。我用了2节课。设备和接口。

设备有一些接口 设备类具有以下方法:

  • void addInterface(String name)
  • void removeInterface(Interface i)
  • 接口getInterface(接口i)#我应该写的:接口getInterface(String interfaceName)
  • void printAllInterface()

接口类有以下方法:

  • void connectInterface(Interface interfaceToConnectTo)
  • void disconnectInterface(Interface interfaceToDisconnectFrom)
  • void printAllConnection()

基本上,我创建两个设备,为每个设备添加一些接口,最后在接口之间建立一些连接。

设备知道其所有接口。接口知道它连接的所有其他接口。

但是给定一个界面我怎么知道它属于哪种设备?

如果Interface知道Device,它们会紧密耦合。到目前为止我学到的东西并不是很好。另一种方法是浏览所有设备以了解它们是否具有我正在寻找的接口。这看起来效率很低。我相信我错过了一些明显的东西。任何人都能看到它吗?

由于

更新: 这可以看作MS Visio文件中的形状和连接。界面实际上只是形状上的连接器。该设备是形状。

2 个答案:

答案 0 :(得分:1)

如果您要求必须能够确定给定Device的{​​{1}},则表示即使InterfaceDevice已经紧密耦合你没有编码。如果您将这两个类分离,那么您就不能再认为所有Interface都属于Interfaces

如果所有Device个对象必须属于Interface的情况,那么我认为Device / {{没有任何问题1}} setDevice上的方法。是的,它创建了循环依赖,但看起来这是建模特定域的最佳方式。在我看来,搜索每个getDevice只是为了查看它是否包含特定的Interface是一个更糟糕的设计决策。

但是,如果Device存在而不属于Interface,或者可能属于完全不同的类,那么您需要重新考虑更高级别的架构。类似于以下内容:如何重构这些类,以便我不需要从Interface获得Device答案实际上取决于您的特定域名,我们对你问题中的信息不太了解。

答案 1 :(得分:0)

对现有界面的一点评论。恕我直言,接口上的打印方法应该移动到不同的接口,以便Device接口只负责维护它控制的接口。另外,“接口getInterface(接口pInterface)”方法接收什么作为Input参数并返回? 至于答案,上面的答案提出了一些问题。如果我理解正确,设备类在调用addInterface()时创建一个接口;如果用例是这样的,给定一个接口就要返回一个设备,接口上的getDevice()是可以的(我不会添加一个setDevice()方法;如果接口总是一个接口,则可以将它传递给接口的构造函数)属于一个设备。 编辑:如果你想给你的api用户一个印象,你的用例要求与接口关联的设备可以在运行时改变,那么setDevice()方法将是首选。