假设我有一组客户。每个 Client 都在其中存储三个对象,例如 Client[1] 有一个CurrentAccount
, CreditCard
,DebitCard
类。
我将如何创建这样的数据库?假设CurrentAccount
有一个公共方法“ getAmount
”,如果我打电话:
int num = Client[1].CurrentAccount.getAmount();
我很确定它不会。但是你如何创建这个数据库呢?
假设我有一组客户。每个 Client 都在其中存储三个对象,例如 Client[1] 有一个CurrentAccount
, CreditCard
,DebitCard
类。
我将如何创建这样的数据库?假设CurrentAccount
有一个公共方法“ getAmount
”,如果我打电话:
int num = Client[1].CurrentAccount.getAmount();
我很确定它不会。但是你如何创建这个数据库呢?
您必须创建一个客户端类,该类具有获取当前帐户、信用卡和借记卡的方法。然后,如果您有一组称为客户端的客户端,则可以执行以下操作:
int num = clients[1].getCurrentAccount().getAmount();
与此相同:
Client client = clients[1];
CurrentAccount account = client.getCurrentAccount();
int num = account.getAmount();
只是更短。
抱歉,我不喜欢这种代码;)
您使用以下代码违反了得墨忒耳法则:
int num = clients[1].CurrentAccount.getAmount();
由于CurrentAccount
必须隐藏客户达到金额值的事实。实际上,这会增加Client
类实现和您的语句之间的耦合。
getCurrentAmount()
你应该在你的Client
类中定义一个命名的方法:
public class Client{
private CurrentAccount currentAccount;
//supposing constructor setting currentAccount here
//and below here, the new method
public long getCurrentAmount(){
return currentAccount.getAmount();
}
}
现在您的Client
类实现将被更好地封装:
int num = clients[1].getCurrentAmount();
public class Client{
public CurrentAccount ca = new CurrentAccount();
public CreditCard cc = new CreditCard();
public DebitCard dc = new DebitCard ();
}
public class CurrentAccount {
private int amount = 0;
public int getAmount(){ return amount; }
}
某处...
client<Client>[] = new Client<Client>[3]();
client[1] = new Client();client[2] = new Client();client[3] = new Client();
int amount = client[1].ca.getAmount();
编辑 1 更好的做法是在客户端类中定义一个方法。
public class Client{
private CurrentAccount ca = new CurrentAccount(); // note that its private now.
public CreditCard cc = new CreditCard();
public DebitCard dc = new DebitCard ();
// define a property acccess getter method
public int getCurrentAccountAmount(){return ca.getAmount();}
}
并将其称为:
int amount = client[1].getCurrentAccountAmount();