我是靠谱客的博主 彪壮溪流,最近开发中收集的这篇文章主要介绍设计模式6之代理模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

关于代理模式,很好理解。比如你买演唱会的票,自己很难买到,只能去找黄牛,那么黄牛就是代理(非官方)卖火车票的。

在开发中,代理模式很常见。一个类的对象不直接生成,通过代理类去帮你生成对象。那么通过代理生成的对像的功能可能会有增强。一般我们想让一个对象的功能增强,就可以使用代理模式。

什么是代理模式

Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问。)

我认为代理模式有几个很有用的作用:

  • 能保护目标对象,我们不直接访问目标对象,而是通过代理对象访问

  • 代理对象可以扩展目标对象的功能

客户端不能直接访问目标对象,只能通过代理对象访问,势必会降低访问速度。同时增加了代理对象,系统的复杂度也增加了。

那么代理模式有哪些要素组成呢?

  1. 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。

  2. 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。

  3. 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

这几种要素关系如下图:

代理模式

代码实现

下面是代码:

Subject

public interface Subject {
    void request();
}

Proxy

public class Proxy implements Subject {

    private RealSubject realSubject;

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

    public void preRequest() {
        System.out.println("访问真实主题之前的预处理!!!");
    }

    public void postRequest() {
        System.out.println("访问真实主题之后的后续处理!!!");
    }
}

RealSubject

public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("真实类访问方法!!!!");
    }
}

测试如下:

public class ProxyTest {
    public static void main(String[] args){
        Proxy proxy = new Proxy();
        proxy.request();
    }
}
访问真实主题之前的预处理!!!
真实类访问方法!!!!
访问真实主题之后的后续处理!!!

关于动态代理

代理模式的比较高级的应用,可以参考我的这篇文章:

面试必问的动态代理

 

最后

以上就是彪壮溪流为你收集整理的设计模式6之代理模式的全部内容,希望文章能够帮你解决设计模式6之代理模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部