Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 代理需要holder类的方法和属性_Oop_Inheritance_Design Patterns_Delegates - Fatal编程技术网

Oop 代理需要holder类的方法和属性

Oop 代理需要holder类的方法和属性,oop,inheritance,design-patterns,delegates,Oop,Inheritance,Design Patterns,Delegates,我有一些实体,它依赖于内部,可能以两种方式起作用。例如,我的连接器类可以作为HttpConnector和TCPConnector运行。对于这两个“引擎”类,“连接”方法的实现不同。它们都共享一些常见的连接器方法,如openFileToTransferString文件名,并共享一些常见属性,如folderWithFiles等。我需要两种方法来找到解决此问题的最佳OOP设计 第一种方式是授权。我使用TCPConnectorEngine创建了连接器,它可以正常工作。问题是我需要共享一些设置和常用方法。

我有一些实体,它依赖于内部,可能以两种方式起作用。例如,我的连接器类可以作为HttpConnector和TCPConnector运行。对于这两个“引擎”类,“连接”方法的实现不同。它们都共享一些常见的连接器方法,如openFileToTransferString文件名,并共享一些常见属性,如folderWithFiles等。我需要两种方法来找到解决此问题的最佳OOP设计

第一种方式是授权。我使用TCPConnectorEngine创建了连接器,它可以正常工作。问题是我需要共享一些设置和常用方法。我当然不想把它们复制粘贴到每个类中。我可以通过构造函数提供公共设置,这意味着将相同的属性编码两次,但共享公共方法更难。也许我可以在它们中的每一个中注入连接器实例,但这看起来很难看。也许我可以为我的两个ConnectorEngine提供基类,但这看起来更复杂

第二种方法是继承。我只是从连接器继承了TCPConnector并得到了所需的一切。但我认为“引擎”决策更适合我的任务,因为它更符合逻辑。它实际上是连接器的引擎,它不是不同类型的连接器。。但也许我错了

你会选择哪种方式?为什么?
我使用Java,如果这对答案很重要的话。

在模式术语中,问题归结为,如何正确实现连接接口:

1使用门面,然后委托给策略

2或使用抽象基类并继承具体实现

因此,在我看来,2是一个很好的解决方案,只有在chil类的内部编排或协议非常相似的情况下,它们才能共享很多结构和代码,然后在基类中捕获这些结构和代码

如果内部使用的概念非常不同,我认为最好实现不同的策略,将它们实例化到facade类中,并委托给策略实例。如果您想要代码重用,例如设置,我会将这个概念保留在不同的类中,例如ConnectionSettings,并从facade将其注入到strategy实例中