初学代理模式

81 阅读1分钟

代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。

模拟业务需求

  • 假设我有一个音乐播放平台,对于一些“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("凉凉");  
    }  
}

执行结果

image.png