在实现具有两个职责的接口的类上实现单一责任原则

时间:2014-01-14 11:42:29

标签: java oop interface rmi

我有一个界面,我不一定要在没有充分理由的情况下进行更改,因为我的客户端程序依赖它:

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

我有一个实现此功能的RMIChatServerImpl类。我想将责任发送到另一个班级,遵守单一责任原则。

2 个答案:

答案 0 :(得分: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);
     }
}

我认为你可能会试图在这个特殊情况下将单一责任原则推得太远。连接到服务器是向其发送消息的必要先决条件,因此有一个有效的参数可以被认为是与服务器通信的一部分,而不是单独的责任。

答案 1 :(得分:0)

我会给你一个很好的理由来改变远程接口。假设在连接之前不可能发送消息,connect()方法应该返回另一个包含sendMessageToServer()方法的远程接口。实现send方法的对象不应该在Registry中,只能通过connect()方法访问它。这为您提供了表达连接约束的准语法方式。然后,您可以拥有两个实现类,分离职责,并提高系统的安全性。