通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能。
代理模式和适配器模式的区别: 如果目标接口内需要添加新功能则用适配器模式,如果目标接口前后需要添加新功能则使用代理模式。
静态代理
每个目标对象都有一个对应的代理对象,在代理对象注入原有接口对象,再调用原有接口实现的前后,可以在代理对象里添加新功能。123456789101112131415161718192021222324252627282930public interface IStar { void sing();}public class LDHStar implements IStar { // 原有对象的原有功能很简单 @Override public void sing() { System.out.println("刘德华唱歌吧"); }}public class LDHStarProxy implements IStar { private LDHStar ldhStar; public LDHStarProxy(LDHStar ldhStar) { this.ldhStar = ldhStar; } //代理对象拥有目标对象 再调用原实现之前后 可以添加新功能 @Override public void sing() { System.out.println("唱歌前有准备"); ldhStar.sing(); System.out.println("唱歌后还要善后"); }}
测试用例及运行结果为:
|
|