Oop 代理需要holder类的方法和属性
我有一些实体,它依赖于内部,可能以两种方式起作用。例如,我的连接器类可以作为HttpConnector和TCPConnector运行。对于这两个“引擎”类,“连接”方法的实现不同。它们都共享一些常见的连接器方法,如openFileToTransferString文件名,并共享一些常见属性,如folderWithFiles等。我需要两种方法来找到解决此问题的最佳OOP设计 第一种方式是授权。我使用TCPConnectorEngine创建了连接器,它可以正常工作。问题是我需要共享一些设置和常用方法。我当然不想把它们复制粘贴到每个类中。我可以通过构造函数提供公共设置,这意味着将相同的属性编码两次,但共享公共方法更难。也许我可以在它们中的每一个中注入连接器实例,但这看起来很难看。也许我可以为我的两个ConnectorEngine提供基类,但这看起来更复杂 第二种方法是继承。我只是从连接器继承了TCPConnector并得到了所需的一切。但我认为“引擎”决策更适合我的任务,因为它更符合逻辑。它实际上是连接器的引擎,它不是不同类型的连接器。。但也许我错了 你会选择哪种方式?为什么?Oop 代理需要holder类的方法和属性,oop,inheritance,design-patterns,delegates,Oop,Inheritance,Design Patterns,Delegates,我有一些实体,它依赖于内部,可能以两种方式起作用。例如,我的连接器类可以作为HttpConnector和TCPConnector运行。对于这两个“引擎”类,“连接”方法的实现不同。它们都共享一些常见的连接器方法,如openFileToTransferString文件名,并共享一些常见属性,如folderWithFiles等。我需要两种方法来找到解决此问题的最佳OOP设计 第一种方式是授权。我使用TCPConnectorEngine创建了连接器,它可以正常工作。问题是我需要共享一些设置和常用方法。
我使用Java,如果这对答案很重要的话。在模式术语中,问题归结为,如何正确实现连接接口: 1使用门面,然后委托给策略 2或使用抽象基类并继承具体实现 因此,在我看来,2是一个很好的解决方案,只有在chil类的内部编排或协议非常相似的情况下,它们才能共享很多结构和代码,然后在基类中捕获这些结构和代码 如果内部使用的概念非常不同,我认为最好实现不同的策略,将它们实例化到facade类中,并委托给策略实例。如果您想要代码重用,例如设置,我会将这个概念保留在不同的类中,例如ConnectionSettings,并从facade将其注入到strategy实例中