2014-01-14 84 views
2

接口的類實現單一職責原則,我有我並不想改變沒有很好的理由爲我的客戶端程序的界面依賴於它:上實現有兩個責任

public interface RMIChatServer extends Remote { 
public void connect(RMIChatClient theClient) throws RemoteException; 
public void sendMessageToServer(String theMessage) throws RemoteException; 
} 

而且我有一個實現此功能的類RMIChatServerImpl。我想把郵件的發送責任轉移到另一個班級,遵守單一責任原則。

回答

4

在單獨的類中實現這兩個方法,然後讓您的RMIChatServer實現將調用委託給單獨的類的實例。

class Connector { 
     public void connect(RMIChatClient theClient) throws RemoteException { 
     } 
} 

class Sender { 
     public void sendMessageToServer(String theMessage) throws RemoteException { 
     } 
} 

class ChatSender implements RMIChatServer { 
    Connector connector = new Connector(); 
    Sender sender = new Sender(); 

    public void connect(RMIChatClient theClient) throws RemoteException { 
     return connector.connect(theClient); 
    } 

    public void sendMessageToServer(String theMessage) throws RemoteException { 
     return sender.sendMessageToServer(theMessage); 
    } 
} 

我想你可能會想太遠推單一職責原則在這種特殊情況下,雖然。連接到服務器是向其發送消息的必要先決條件,因此有一個有效的參數可以被認爲是與服務器通信的相同責任的一部分,而不是單獨的責任。

0

我給你一個很好的理由來改變遠程接口。假設在連接之前不應該發送消息,connect()方法應該返回另一個包含sendMessageToServer()方法的遠程接口。實現send方法的對象不應該在註冊表中,它應該只能通過connect()方法訪問。這給你一個表達連接約束的準句法方式。然後你可以擁有兩個實現類,分離責任,並提高系統的安全性。