静态代理模式
代理模式分为两种:静态代理和动态代理。
静态代理:代理类是由我们手动添加class类来实现,而动态代理类是由程序来生成代理类,代理无论是在生活中还是在程序中都有大量使用,如经纪人代理明星签合同,安排演出,回收尾款等操作都是通过代理完成,而具体唱歌则是有明星来完成。静态代理类和被代理类需要实现同一接口,而且由于代理类有些方法最终还是得调用被代理类来完成,所以静态代理类中还得持有被代理类的引用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | public interface Star { //签合同 void signContract(); //唱歌 void sing(); //收尾款 void collectMoney(); } //====================================== public class ProxyStar implements Star { private Star star; public ProxyStar(Star star) { //通过注入持有被代理对象的引用 super (); this .star = star; } @Override public void signContract() { System.out.println( "ProxyStar 签合同" ); //这些方法都可以由代理对象,经纪人来完成 } @Override public void sing() { star.sing(); //调用被代理对象 唱歌 方法 ,因为唱歌这个方法必须由明星本人完成 代理对象无法代劳 } @Override public void collectMoney() { System.out.println( "ProxyStar 收尾款" ); } } //============================================= public class RealStar implements Star { @Override public void signContract() { System.out.println( "RealStar 签合同" ); } @Override public void sing() { System.out.println( "RealStar 唱歌" ); } @Override public void collectMoney() { System.out.println( "RealStar 收尾款" ); } } //========================================= @Test public void func() { Star realStar= new RealStar(); Star proxyStar= new ProxyStar(realStar); //注入被代理对象 proxyStar.signContract(); //这些事情由经纪人完成 proxyStar.sing(); //这些事情由明星本人完成 proxyStar.collectMoney(); //这些事情由经纪人完成 } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步