静态代理
代理模式
- 代理:代理对象主要用来拦截被代理对象的访问
- 代理对象可以理解为明星的经纪人,被代理对象可以理解为某个明星 - 代理对象要持有真实业务对象,即在代理类中创建被代理类的对象
- 代理对象和被代理对象,具备相同的行为方法. 实现同一个接口
- 代理对象拦截被代理对象的访问,可以修改访问的参数 返回值 甚至拦截访问
代码演示
public interface Star {
public abstract void sing(double money);
public abstract void liveShow(double money);
public abstract void sleep();
}
public class LiuYan implements Star{
public void sing(double money) {
System.out.println("唱了一首:甜蜜蜜");
System.out.println("赚了"+money+"元");
}
public void liveShow(double money) {
System.out.println("参加了:奔跑吧,兄弟");
System.out.println("赚了"+money+"元");
}
public void sleep() {
System.out.println("好累啊,休息一会。。。。。");
}
}
public class SuoGe implements Star {
private LiuYan ly = new LiuYan();
public void sing(double money) {
if (money < 100000) {
System.out.println("滚,穷屌丝,一边玩泥巴去");
return;
}
System.out.println("我抽取了" + money * 0.2 + "元代理费用");
ly.sing(money * 0.8);
}
public void liveShow(double money) {
if (money < 500000) {
System.out.println("滚,穷屌丝,一边玩泥巴去");
return;
}
System.out.println("我抽取了" + money * 0.2 + "元代理费用");
ly.liveShow(money * 0.8);
}
public void sleep() {
ly.sleep();
}
}
public class ProxyDemo1 {
public static void main(String[] args) {
SuoGe sg = new SuoGe();
sg.sing(200000);
System.out.println("-----------------------------------");
sg.liveShow(1000000);
System.out.println("-----------------------------------");
sg.sleep();
}
}