代理模式-控制对象访问

代理模式定义

为其它对象提供一种代理以控制对这个对象的访问。

代理模式结构图

在这里插入图片描述

代理模式角色介绍

抽象主题角色:Subject,一个普通的业务抽象类或接口。

真实主题角色,RealSubject,它实现了抽象主题角色定义的接口,是业务逻辑的真正执行者。

代理主题角色,Proxy,它和真实主题角色一样,也实现了抽象主题角色定义的接口,但它包含了对真实主题的引用,在任何需要的时候,把请求委托给真实主题角色进行处理;它对真实对象的访问进行控制。

代理模式结构代码

抽象主题:

public abstract class Subject {
    public abstract void request();
}

真实主题:

public class RealSubject extends Subject {
    public void request() {
        System.out.println("i am real");
    }
}

代理:

public class Proxy extends Subject {

    private Subject realSubject;

    public Proxy() {
        this.realSubject = new RealSubject();
    }

    public void request() {
        this.before();
        realSubject.request();
        this.after();
    }

    private void before(){
        System.out.println("i am proxy before");
    }

    private void after(){
        System.out.println("i am proxy after");
    }
}

客户端:

public class Client {

    public static void main(String[] args) {
        Subject subject = new Proxy();
        subject.request();
    }
}

代理模式运行机制

代理角色和真实主题角色实现共同的抽象主题角色,来达到代理角色替换真实主题角色的目的。
代理角色虽然可以替换真实主题角色,但代理角色通过持有真实主题角色对象,把请求再委托给真实主题角色;通常代理角色委托请求前后会进行相关前置或后置处理,以此达到对真实对象的控制。

代理模式解决的核心问题

代理模式通过共同实现和组合真实对象,实现了对真实对象的控制,相当于真实对象的前置屏障。

猜你喜欢

转载自blog.csdn.net/javaloveiphone/article/details/85530655