我有一个界面,我不一定要在没有充分理由的情况下进行更改,因为我的客户端程序依赖它:
public interface RMIChatServer extends Remote {
public void connect(RMIChatClient theClient) throws RemoteException;
public void sendMessageToServer(String theMessage) throws RemoteException;
}
我有一个实现此功能的RMIChatServerImpl类。我想将责任发送到另一个班级,遵守单一责任原则。
答案 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()方法访问它。这为您提供了表达连接约束的准语法方式。然后,您可以拥有两个实现类,分离职责,并提高系统的安全性。