gpt4 book ai didi

Java 将通用方法放入父类(super class)中

转载 作者:行者123 更新时间:2023-11-30 08:09:52 25 4
gpt4 key购买 nike

我有两个类,它们都采用相同类型的对象作为参数,但随后对该对象调用不同的方法以获得另一个对象(获得的对象的类型在两个类中也不同),该对象在整个类中被广泛使用不同方法中的类。现在,其中一些方法在两个类之间是相同的,所以我认为将它们放在一个子类中是明智的。但是,由于这些方法依赖于通过对作为构造函数参数给出的对象调用不同方法而获得的对象,我不能只将构造函数从子类复制到父类(super class)。我不确定父类(super class)如何获得所需的对象。似乎我的潜在父类(super class)“Server”将依赖于它的子类,这听起来甚至是错误的。

这是问题的说明性代码:

class ServerOne() {

Connector connector;

public ServerOne(Conf conf) {
Conf.ServerOneConf config = conf.getServerOneConf();
connector = config.getConnector(); //
}

// a lot of methods that use connector
}

class ServerTwo() {

Connector connector;

public ServerTwo(Conf conf) {
Conf.ServerTwoConf config = conf.getServerTwoConf(); // notice that it uses a different method for obtaining the configuration. Also, the obtained object is of a different type than the configuration object that was obtained in the ServerOne constructor.

connector = config.getConnector();
}

// a lot of methods that use connector
}

class Server() {
// would like to implement some common methods that use connector.
// need to get an instance of the Connector to this class.
}

非常感谢您的帮助:)

最佳答案

可能有理由将您的服务器类子类化,但如何获取连接器可能不是子类化的原因。制定处理获取连接器的策略:

interface ConnectorStrategy {
Connector retrieveConnector(Conf conf);
}

像这样的实现

class ServerOneConnectorStrategy implements ConnectorStrategy {
public Connector retrieveConnector(Conf conf) {
return conf.getServerOneConf().getConnector();
}
}

并在创建服务器对象时将其传递给服务器对象。

或者,如果您需要层次结构,请使用 template method pattern :

abstract class Server {
abstract Connector retrieveConnector(Conf conf);
void initializeConnector(Conf conf) {
...
connector = retrieveConnector(conf);
}
...
}

class ServerOne extends Server {
public Connector retrieveConnector(Conf conf) {
return conf.getServerOneConf().getConnector();
}
}

关于Java 将通用方法放入父类(super class)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32050658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com