代理模式

代理模式:
为其他对象提供一种代理以控制对这个对象的访问。
代理模式的应用:
1.远程代理,也就是为一个对象在不同的地址空间提供局部代表,
这样可以隐藏一个对象存在于不同地址空间的事实。

比如说dubbo的服务提供者代理,在消费者去远程调用服务提供者的时候,
实际上是调用的提供者在本地的代理,由代理再去访问远程服务。

2.虚拟代理,性能优化的一种方式,比如说某个对象的创建需要花很长时间
,这样的对象在启动的时候如果就创建,会导致启动时候很慢
因此可以使用代理,先创建一个代理对象,等到真正要用到时候,由代理对象去负责
初始化该对象。

3.安全代理,用来控制真实对象访问时的权限 。

4.智能指引,是指在调用真实对象的时候,代理处理另外一些事情。

代理就是真实对象的代表,在访问对象时引入一定程度的间接性,因为这种
间接性,可以附带多种用途。

uml类图如下
在这里插入图片描述

定义一个subject接口,里面定义了realSubject和proxy的共用接口。
这样 在任何使用了真实对象realSubject的地方都可以使用proxy。

realSubject类,一个真实对象。
Proxy ,保存一个真实对象的引用,使得代理可以访问实体
并提供一个与Subject的接口相同的接口。 代理就可以用来替代实体。

public interface Subject {

    void request();
}



public class Proxy implements Subject {

    private Subject subject;


    @Override
    public void request() {

        if (subject==null){
            subject=new RealSubject();
        }
        System.out.println("先执行代理的逻辑");
        subject.request();
    }
}

public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("真实请求");
    }
}

使用

public class Application {

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


在这里插入图片描述

代理模式和装饰器模式,有一部分类似,都是对原来的对象进行了修饰
但是装饰器模式侧重于对对象功能拓展的灵活性,可以给一个对象装饰不同的功能,一个功能也可以不同的对象装饰。代理类侧重于封装性,将原来访问真实类改为访问代理类。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值