代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。
模拟业务需求
- 假设我有一个音乐播放平台,对于一些“VIP”级别的音乐,用户必须拥有“VIP"角色才可以播放,普通用户无法播放”VIP"级别的音乐。
- 由于这部分没有复杂的逻辑,所以就不分析了,直接上代码
代码
公共接口
public interface MusicResource {
void play(String musicName);
}
被代理的对象
public class MusicService implements MusicResource{
@Override
public void play(String musicName) {
System.out.println("开始播放:" + musicName);
}
}
代理对象
public class MusicProxy implements MusicResource{
private String userRole;
private MusicService musicService;
public MusicProxy(String userRole,MusicService musicService){
this.userRole = userRole;
this.musicService = musicService;
}
@Override
public void play(String musicName) {
if(!"vip".equals(userRole)){
System.out.println("非VIP用户无法播放此音乐");
}else {
musicService.play(musicName);
}
}
}
测试
public class main {
public static void main(String[] args) {
MusicProxy vip = new MusicProxy("vip",new MusicService());
vip.play("凉凉");
MusicProxy novip = new MusicProxy("novip",new MusicService());
novip.play("凉凉");
}
}
执行结果