常用设计模式之代理模式

代理模式的目的是:对其他对象提供一种代理以控制对这个对象的访问。
代理模式有很多种,使用场景。
1,远程代理。为一个对象在不同的地址空间提供一个局限性的代表。这样可以隐藏一个对象存在于不同地址空间的事实。
外部使用这个局限性的代表,而不知道真实的对象存在于哪里。

2,虚拟代理。如果一个对象开销很大,可以创建这个对象的代理来存放实例化需要很长时间的这个对象。

3,安全代理。用来控制真实对象访问时的权限。一般用于对象需要不同的访问权限的时候。

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

先来看一张代理模式的结构图。引用自《大话设计模式》一书中的机构图。
这里写图片描述

先通过上图来了解大概的代理模式的运行模式。接下来上代码:

/**
 * 定义了RealSubject和Proxy的公共接口。
 * 这样就使任何使用RealSubject的地方否可以使用Proxy
 */
public abstract class Subject {
    public abstract void request();
}

定义一个处理逻辑类和代理类公用的抽象类,也可以是接口。

/**
 *真正需要处理逻辑的类
 */
public class RealSubject extends Subject {

    @Override
    public void request() {
        //逻辑处理,一般为数据请求
    }
}

处理逻辑的类

/**
 * 代理需要处理逻辑的类(RealSubject)来提供一个对外的接口
 */
public class Proxy extends Subject {
    private RealSubject realSubject;

    @Override
    public void request() {
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        realSubject.request();
    }
}

具体处理逻辑的代理类,提供对外的接口和方法。

/**
 * 运用方法
 */
public class test {

    private void test() {
        //Proxy和RealSubject同样继承了Subject接口。所以,Proxy是RealSubject的代理类
        Proxy proxy = new Proxy();
        proxy.request();//执行proxy的request的方法的时候,其实执行的是RealSubject的request的方法,只不过程序是不知道的
    }

}

得到的效果就是,当我们执行proxy的request方法的时候,其实是执行的RealSubject的request的方法。

让proxy类代理了RealSubject需要做的一些事情。同时,RealSubject也可以有多个代理类,每个代理类可以做不同的逻辑处理,这样,需要什么样的逻辑处理就实例化相对应的代理类。

例如,《武林外传》中吕秀才让燕小六替自己去向郭芙蓉求婚。
这个时候,燕小六(proxy)就是吕秀才(RealSubject)的代理类。
同样的,吕秀才也可以让李大嘴替自己做一顿饭。
选择不同的代理就可以得到真实类的不同代理效果。

代理模式的代码很少,看似简单。但是运用起来有很多方式,就像代理模式的使用场景一样繁多。需要程序员们在实战中写出良好的代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值