gpt4 book ai didi

Java从父对象实例化子对象

转载 作者:行者123 更新时间:2023-12-02 12:04:22 25 4
gpt4 key购买 nike

我有一个共享相同“状态”并执行 CRUD 操作的以下类。此操作不可重复/幂等。

public class Client {
private static String state;
public Client(args){
this.state = buildStateFromArgs(); // this value will not change
}

public void createUser();
public User getUser();
public User updateUser();
public void deleteUser();

public void createJob();
public Job getJob();
public Job updateJob();
public void deleteJob();

// other CRUD functions ....
}

我正在考虑将其重构为类似的内容

public class Client {
public Client(args){
this.state = buildStateFromArgs();
}
private static String state;
}

public class UserClient extends Client{
public void createUser();
public User getUser();
public User updateUser();
public void deleteUser();
}

但我不确定启动子类的最佳方法是什么。假设这是当前的实现,

Client client = new Client(args);
client.createUser();
client.createJob();

我应该只是沮丧吗?

Client client = new Client(args);
UserClient userClient = (UserClient) client;
userClient.createUser();
JobClient jobClient = (JobClient) client;
jobClient.createJob();

或者我应该从父级构造子级?

Client client = new Client(args);
UserClient userClient = new UserClient(client);
userClient.createUser();
JobClient jobClient = new JobClient(client);
jobClient.createJob();

或者是否有更好的设计模式适合此类问题?

最佳答案

鉴于 UserClient is-a Client,我将采取以下方法:

UserClient client = new UserClient();
client.createUser();

我采用这种方法的原因是用户特定的函数应该只存在于UserClient上,因此只能从这样的函数中调用。

鉴于状态必须在所有客户端之间共享的新信息,我可能会使用静态初始化程序:

class Client {
private static String state;
static {
state = buildStateFromArgs(args); // this value will not change
}
}

这假设 args 此时可用。如果不是,那么您需要将 buildStateFromArgs() 设为 publicstatic 函数,并在实例化任何子类之前调用​​它:

Client.buildStateFromArgs(args);
UserClient client = new UserClient();
...

关于Java从父对象实例化子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47007394/

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