设计模式之代理模式
代理模式的概念
为其他对象提供一个代理以控制对这个对象的访问。
代理模式通常用于:
控制访问:在访问目标对象之前进行一些额外的操作(如权限验证)。
远程代理:为一个位于不同地址空间的对象提供一个本地代理。
虚拟代理:通过先处理一个简单的对象来延缓真实对象的创建。
保护代理:为不同的用户群提供不同级别的访问权限。
举个栗子:
用户想听明星唱歌,用户通过代理找到明星,代理安排明星唱歌的场地,用户来到场地,明星唱歌。

流程
用户想听歌===>代理===>收钱===>安排场地==>明星来唱歌===>清理场地
代码实现
创建明星类
package org.xiji.proxy;/*** 唱歌明星*/
public class Star {public void sing(){System.out.println("明星正在唱歌");}
}
创建明星代理类
package org.xiji.proxy;/*** 明星代理*/
public class StarProxy {private Star star;/**** 构造函数*/public StarProxy(Star star){this.star = star;}public void sing() {pay();System.out.println("==========================================");arrange();System.out.println("==========================================");System.out.println("开始唱歌");star.sing();System.out.println("结束唱歌");System.out.println("==========================================");clean();}/*** 收钱*/public void pay(){System.out.println("收钱");}/*** 安排场地*/public void arrange(){System.out.println("安排场地");}/*** 打扫场地*/public void clean(){System.out.println("打扫场地");}}
创建用户类
package org.xiji.proxy;public class Users {StarProxy starProxy;/*** 找代理* @param starProxy*/public void findStarProxy(StarProxy starProxy){this.starProxy = starProxy;}public void listen(){this.starProxy.sing();}}
代理模式测试类
package org.xiji.proxy;/*** 代理模式*/
public class proxyMain {public static void main(String[] args) {//明星Star star = new Star();//明星===>明星代理System.out.println("明星找代理");StarProxy starProxy = new StarProxy(star);//想听歌了===》直接找代理完事了Users xiji = new Users();//小久想听歌了==>找到代理System.out.println("小久想听歌");xiji.findStarProxy(starProxy);//开始听歌xiji.listen();}
}
执行结果

