具体的图示如下
现在我们来写一个小例子
假如有一个用户想连接网络,这是一个需求,那么要做这个需求的有谁呢?一个是代理用户连接网络的对象(代理类对象),一个是实现需求的对象(被代理类)
那么用户连接网络的时候,不会直接找到服务器对象让它连接,因为在连接网络之前可能还需要一系列的操作,这些操作是代理类给我们做的。
上代码
需求接口
//连接网络的需求
public interface NetWork {
void netWork();//连接方法
}
代理类
public class Agent implements NetWork{
private NetWork netWork;//被代理类实现的接口对象
@Override
public void netWork() {
check();//检查网络(一系列操作)
netWork.netWork();//连接网络
}
public void check(){
System.out.println("连接网络前的检查工作。。。");
}
public Agent(NetWork netWork) {
this.netWork = netWork;
}
public Agent() {
}
public NetWork getNetWork() {
return netWork;
}
public void setNetWork(NetWork netWork) {
this.netWork = netWork;
}
}
被代理类(服务器)
public class Service implements NetWork{
@Override
public void netWork() {
System.out.println("成功连接到网络");
}
}
用户的主函数流程
public class User {
public static void main(String[] args) {
//用户想要连接网络,寻找代理类的对象
Agent agent = new Agent();
//代理类寻找被代理类(提供需求的类对象)
agent.setNetWork(new Service());
//代理类对象帮助连接网络
agent.netWork();
}
}
执行结果