设计模式 静态代理模式

1 静态代理模式

image

1.1 定义

简单来说就是创建一个代理对象(Proxy),只有代理对象能调用目标对象(RealSubject),同时Proxy也实现了目标对象RealSubject的接口(Subject),这就能实现多态。

代理模式的核心是,客户端(Client)要想访问目标对象(RealSubject)的方法时,只能通过代理对象(Proxy)实现。

可以看到代理对象相比目标对象还多了preRequest和afterRequest,这些自定义的方法就能实现对目标对象的方法的增强,这也是springAOP的原理

image

1.2 手动实现

为了方便学习,代码都写在一个文件下

public class ProxyPattern {
    public static void main(String[] args) {
        //实例化目标对象
        RealSubject realSubject = new RealSubject();
        //实例化代理对象
        RealSubjectProxy realSubjectProxy = new RealSubjectProxy(realSubject);
        //使用代理对象的方法
        realSubjectProxy.doWork();
    }
}

/**
 * 统一接口
 */
interface Subject{
    void doWork();
}

/**
 * 目标对象
 */
class RealSubject implements Subject{

    @Override
    public void doWork() {
        System.out.println("做了某件事");
    }
}

/**
 * 代理对象
 */
class RealSubjectProxy implements Subject{

    private RealSubject subject;

    public RealSubjectProxy(RealSubject subject){
        this.subject = subject;
    }

    /**
     * 自定义方法1
     */
    public void connection(){
        System.out.println("建立连接");
    }

    /**
     * 自定义方法2
     */
    public void log(){
        System.out.println("日志记录");
    }

    /**
     * 对目标对象的方法进行增强
     */
    @Override
    public void doWork() {
        connection();
        subject.doWork();
        log();
    }
}

1.3 和装饰器模式的区别

代理模式强调代理类对真正办事儿的类的权限控制能力,装饰器强调对旧对象而不是旧类的功能扩展

posted @ 2021-10-31 19:28  夏·舍  阅读(36)  评论(0编辑  收藏  举报