Java:如何实现静态代理?
代理模式:由代理对象来帮你忙前忙后,你负责出现一下就好了。
静态代理模式:代理对象不可变,已经确定了的。
需要:
1.实现相同的接口。
2.真实角色。
3.代理角色,组合了真实角色(在代理角色里面加一个属性为真实对象,通过构造器获取)。
4.代理角色在共同的方法中调用真实角色的方法。
例子:
/** * 静态代理,测试 */ public class StaticProxy { public static void main(String[] args) { new Me(new Zhangsan()).goBattle(); } } //统一的接口:去打架 interface Battle{ void goBattle(); } //真实对象:去打架的人 class Zhangsan implements Battle{ @Override public void goBattle() { System.out.println("张三:爷们要战斗!"); } } //代理对象,为真实角色忙前忙后:武器提供者 class Me implements Battle{ Battle someBody; public Me(Battle someBody){ this.someBody=someBody; } @Override public void goBattle() { giveSome(); someBody.goBattle();//灵魂在此 returnSome(); } //忙前 void giveSome(){ System.out.println("拿到一把武器!"); } //忙后 void returnSome(){ System.out.println("打完了武器还掉。"); } }
测试结果:
总所周知:
1.Thread实现了Runnable接口
2.我自己的类 Mythread 也实现了Runnable接口,那肯定得重写它唯一的 run 方法啊。
3.Thread 里面有 Runnable 接口的对象:
4.Thread(通过start)调用run方法。
所以说,最经典的静态代理设计模式就是多线程的开启模式:
开启一个线程:new Thread(new Mythread()).start();