静态代理:由开发者设计代理类,其中代理类的方法和真实类的方法,入参都是一致的,只是方法体不同,代理类和真实类实现相同的接口
优点:解耦合,简单
缺点:代理类和真实类实现相同接口和方法,代码重复,如何接口实现一个新的方法,处理真实类需要实现,代理类也需要进行实现该接口,增加程序代码的复杂度。
静态代理设计模式实现三部曲:
第一步:定义一个共同使用的接口类,供代理类和真实类共同实现
public interface ProxyInfo { void MyUtilProxy(); }
第二步:定义真实类和代理类共同实现上面的接口类,
代理类中持有真实类的引用,同时实现真实的需求,
真实类: public class RealRole implements ProxyInfo { @Override public void MyUtilProxy() { System.out.println("核心业务逻辑方法执行开始"); System.out.println("核心业务逻辑方法执行结束"); } }
代理类: public class ProxyRole implements ProxyInfo { private RealRole realRole; public ProxyRole(RealRole realRole){ this.realRole = realRole; } @Override public void MyUtilProxy() { System.out.println("代理角色的边缘业务逻辑处理"); realRole.MyUtilProxy(); System.out.println("代理角色的边缘业务逻辑处理结束"); } }
第三步:创建真实类对象和代理类对象,同时将真实类对象的引用传给代理类对象,执行代理类对象的方法
public class StaticProxyPattern { public static void main(String[] args) { //创建真实对象 RealRole realRole = new RealRole(); //创建代理对象 ProxyRole proxyRole = new ProxyRole(realRole); //执行代理对象的增强方法 proxyRole.MyUtilProxy(); } }
静态代理设计模式使用场景:java线程的设计就使用了静态代理的设计模式,其中自定义的线程类实现Runable接口,Thread接口也实现了Runable接口,再创建子线程的时候,传入自定义线程类的引用,再通过调用start()方法,调用自定义线程的run()方法,实现线程的并发执行。