先看一个简单的例子,假设有接口ISubject:
public interface ISubject {
public void doSomething();
}
这是ISubject的实现Subject:
public class Subject implements ISubject {
/* (non-Javadoc)
* @see ISubject#doSomething()
*/
@Override
public void doSomething() {
System.out.println("done!");
}
}
客户端需要调用ISubject接口的实现类,但是客户端Client和Subject是分布在不同的机器上的,如果Client要调用Subject的话,就必须为远程通信而编写代码,而如果又有其他的模块需要调用Subject,则又需要再写远程通信的代码,因为为了保证这份远程通信的代码能够重用,则可以写一个Subject的代理类
public class Proxy implements ISubject {
private Subject subject;
// 这里写远程调用的代码
/* (non-Javadoc)
* @see ISubject#doSomething()
*/
@Override
public void doSomething() {
this.subject.doSomething();
}
}
这样,需要远程调用Subject的模块就可以通过代理类Proxy来操纵Subject对象,而不需要去关心远程调用的问题了