通俗的讲:静态代理就是写出一个被代理类的双胞胎类,有共同的接口父亲,只是代理类拿着兄弟的对象在自己内部操作兄弟的行为,同时做些自己的事。
案例:结婚 婚庆公司
静态代理:
和被代理目标类实现相同接口(获取相同接口方法)代理类是对目标类的增强辅助代理类需要传入被操作的目标类对象代理类实现相同接口方法的时候需要在其中加入目标类的方法调用调用代理类的接口方法即可实现增强 // 静态代理模式演示 public class staticProxy { public static void main(String[] args) { // 开始代理 代理对象获取代理目标 WeddingCompany weddingCompany = new WeddingCompany(new YouAction()); weddingCompany.HappuMarry(); } }结婚接口:
// 定义结婚接口动作 public interface Marry { void HappuMarry(); }定义结婚人动作:
// 真实结婚角色 public class YouAction implements Marry{ @Override public void HappuMarry() { // 定义你的结婚动作 System.out.println("你在结婚,开心"); } }定义代理公司动作:
// 婚庆代理公司 public class WeddingCompany implements Marry { // 定义被代理目标 private Marry target; public WeddingCompany(Marry target) { this.target = target; } // 代理公司行为 @Override public void HappuMarry() { before(); this.target.HappuMarry(); after(); } // 定义代理公司增强部分 public void before(){ System.out.println("代理公司,收定金。"); System.out.println("代理公司,布置现场。"); System.out.println("代理公司,主持。"); } public void after(){ System.out.println("代理公司,完成任务"); System.out.println("代理公司,收尾款"); } } 代理公司,收定金。 代理公司,布置现场。 代理公司,主持。 你在结婚,开心 代理公司,完成任务 代理公司,收尾款简短版本静态代理案例:
// 静态代理测试 public class StaticProxy { public static void main(String[] args) { HelloProxy helloProxy = new HelloProxy(); helloProxy.sayHello(); } } // 代理 class HelloProxy implements HelloInterface{ // 被代理对象 接口获取 一般是一对一的,直接固定创建即可 private HelloInterface helloInterface = new Hello(); @Override public void sayHello() { System.out.println("静态代理输出--1"); System.out.println("静态代理输出--2"); helloInterface.sayHello(); System.out.println("静态代理输出--3"); System.out.println("静态代理输出--4"); } } // 被代理 class Hello implements HelloInterface{ @Override public void sayHello() { System.out.println("被代理类输出--hello"); } } // 共同接口 interface HelloInterface{ void sayHello(); }