代理模式的概念
为其他对象提供一个代理以控制对这个对象的访问。
代理模式通常用于:
控制访问:在访问目标对象之前进行一些额外的操作(如权限验证)。
远程代理:为一个位于不同地址空间的对象提供一个本地代理。
虚拟代理:通过先处理一个简单的对象来延缓真实对象的创建。
保护代理:为不同的用户群提供不同级别的访问权限。
举个栗子:
用户想听明星唱歌,用户通过代理找到明星,代理安排明星唱歌的场地,用户来到场地,明星唱歌。
流程
用户想听歌===>代理===>收钱===>安排场地==>明星来唱歌===>清理场地
代码实现
创建明星类
java
package org.xiji.proxy;
/**
* 唱歌明星
*/
public class Star {
public void sing(){
System.out.println("明星正在唱歌");
}
}
创建明星代理类
java
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("打扫场地");
}
}
创建用户类
java
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();
}
}
代理模式测试类
java
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();
}
}