1)您希望AbstractTableModel在構造函數中使用Bank對象。 AbstractTableModel方法然後委託給Bank對象的基礎操作列表。
有兩種方法可以解決銀行對象更改問題時會發生的情況。
一)假設與方法的銀行對象:
public List<Operation> getOperations();
您只需撥打getOperations()
每一個請求到表模型進行的時間。例如:
public Object getValueAt(int row, int column) {
return bank.getOperations().get(row)...
}
這很慢但是獲取更新的簡單方法。
b)以更復雜的方式,當將新操作添加到銀行時,您可以使用Bank對象的AbstractTableModel寄存器接收事件。這看起來像:
public class BankTableModel extends AbstractTableModel {
private List<Operation> operations;
public BankTableModel(Bank bank) {
operations = bank.getOperations();
bank.addOperationEventListener(...);
}
public Object getValueAt(int row, int column) {
return operations.get(row)...
}
}
這樣做的問題是,RMI不提供一種機制,讓服務器跟客戶端,以便在服務器和客戶端必須是RMI端點。請參閱RMI Events。
2)RMI的要點是你得到駐留在服務器上的遠程對象的存根。存根允許您調用遠程對象上的方法,就好像該對象是本地對象一樣。不要擔心這個級別的安全性,特別是在學術環境中。
我會擺脫Session對象,直接返回Bank對象。如果您將所有電話轉接到銀行對象,那麼您實際上只是想直接與Bank對象進行交互。在更復雜的系統中,添加代理或外觀圖層可能有合理的理由,但在這種情況下,我會保持簡單。
3)您的GUI和您的服務器應該是兩個不同的對象。你的GUI是你的客戶端,你的服務器端應該沒有GUI代碼。
你在服務器上使用什麼樣的技術(EJB,Servlets,其他)?你爲什麼選擇在一個單獨的層上放置一些對象? – rancidfishbreath
我正在使用RMI。你是什麼意思分開的層次? – xenom
RMI是一個非常低級別的API,也是執行客戶端服務器應用程序的更復雜方法之一。我試圖弄清楚爲什麼選擇這項技術以及您希望從中獲得什麼。也許你想學習RMI,這是一個有效的動機。如果你能幫助我們理解你爲什麼沿着這條路線走下去,或者你真的想要完成什麼,那麼你將得到更好的答案。 – rancidfishbreath