我有一些实体,取决于内部,可能有两种方式。例如,我的Connector类可以作为HttpConnector和TCPConnector运行。 ' connect'的实施方法因这两种引擎而异。类。它们都共享一些连接器的常用方法,例如" openFileToTransfer(String fileName)"并分享共同的属性,例如" folderWithFiles"我需要两个为这个问题找到最好的OOP设计。
1)第一种方式是授权。我使用TCPConnectorEngine创建Connector,它可以工作。问题是我需要分享一些设置和常用方法。我当然不想将它们粘贴到每个类中。我可以通过构造函数提供通用设置,这意味着两次编码相同的属性,但共享常用方法更难。可能是我可以在每个中注入Connector实例,但这看起来很难看。可能我可以为我的两个ConnectorEngines提供一个BaseClass,但这看起来更复杂。
2)第二种方式是继承。我只是从Connector继承TCPConnector并获得我所需要的一切。但我想这个引擎'决定更适合我的任务,因为它更符合逻辑。它实际上是连接器的引擎,它的连接器类型不同......但可能是我错了?
您会选择哪种方式?为什么? 如果对答案很重要的话,我会使用Java。
答案 0 :(得分:0)
在模式术语中,问题归结为如何正确实现Connection
接口:
1)使用 facade ,然后委派策略。
2)或者使用抽象基类并继承具体实现。
所以在我的意见2 是一个很好的解决方案,只是在chil类的内部编排或协议非常相似的情况下,因此它们可以共享很多结构和代码,然后在基类中捕获。
如果内部使用的概念完全不同,我认为最好实施不同的策略,在 facade 类中实现这些策略并委托策略实例。如果您想要代码重用,例如对于设置,我会将此概念保留在不同的类中,例如ConnectionSettings
并从外观将其注入策略实例。