我目前正在自己学习书本和网站的OOP。我正处于我需要练习的地步。我开始了一个小项目,我知道如何以程序的方式做。但是当我尝试以OOP方式进行操作时,它给我留下了一些问题。
我的项目概念是这样的。我想在工作中组织/存档/管理我们系统的互连。我用了2节课。设备和接口。
设备有一些接口 设备类具有以下方法:
接口类有以下方法:
基本上,我创建两个设备,为每个设备添加一些接口,最后在接口之间建立一些连接。
设备知道其所有接口。接口知道它连接的所有其他接口。
但是给定一个界面我怎么知道它属于哪种设备?
如果Interface知道Device,它们会紧密耦合。到目前为止我学到的东西并不是很好。另一种方法是浏览所有设备以了解它们是否具有我正在寻找的接口。这看起来效率很低。我相信我错过了一些明显的东西。任何人都能看到它吗?
由于
更新: 这可以看作MS Visio文件中的形状和连接。界面实际上只是形状上的连接器。该设备是形状。
答案 0 :(得分:1)
如果您要求必须能够确定给定Device
的{{1}},则表示即使Interface
和Device
已经紧密耦合你没有编码。如果您将这两个类分离,那么您就不能再认为所有Interface
都属于Interfaces
。
如果是所有Device
个对象必须属于Interface
的情况,那么我认为Device
/ {{没有任何问题1}} setDevice
上的方法。是的,它创建了循环依赖,但看起来这是建模特定域的最佳方式。在我看来,搜索每个getDevice
只是为了查看它是否包含特定的Interface
是一个更糟糕的设计决策。
但是,如果Device
存在而不属于Interface
,或者可能属于完全不同的类,那么您需要重新考虑更高级别的架构。类似于以下内容:如何重构这些类,以便我不需要从Interface
获得Device
?答案实际上取决于您的特定域名,我们对你问题中的信息不太了解。
答案 1 :(得分:0)
对现有界面的一点评论。恕我直言,接口上的打印方法应该移动到不同的接口,以便Device接口只负责维护它控制的接口。另外,“接口getInterface(接口pInterface)”方法接收什么作为Input参数并返回? 至于答案,上面的答案提出了一些问题。如果我理解正确,设备类在调用addInterface()时创建一个接口;如果用例是这样的,给定一个接口就要返回一个设备,接口上的getDevice()是可以的(我不会添加一个setDevice()方法;如果接口总是一个接口,则可以将它传递给接口的构造函数)属于一个设备。 编辑:如果你想给你的api用户一个印象,你的用例要求与接口关联的设备可以在运行时改变,那么setDevice()方法将是首选。