真实对象和代理对象都要实现同一个接口,代理对象要代理真实角色
好处:代理对象可以做很多真实对象做不了的事情;真实对象专注做自己的事情
public class Hello {
public static void main(String[] args) {
//通过代理对象来实现真实对象的方法
new Proxy(new RealMovie()).play();
}
}
//代理对象和真实对象需要实现同一个接口
interface Movie{
void play();
}
//真实对象
class RealMovie implements Movie{
@Override
public void play() {
System.out.println("正在播放电影!");
}
}
//代理对象
class Proxy implements Movie{
//之所以要实现同一个接口,是为了复用,这样任何实现该接口的其他对象都可以被代理而无需修改代码
//此处一定要用接口来定义变量,不然其他类使用代理时还要改名字
Movie proxy;
public Proxy(Movie proxy) {
this.proxy = proxy;
}
public void BeforeAdv(){
System.out.println("电影院的第一个广告");
}
public void AfterAdv(){
System.out.println("电影院的第二个广告");
}
@Override
public void play() {
//代理的方法中可以自定义增强的功能
BeforeAdv();
proxy.play();
AfterAdv();
}
}