代理模式

设计模式之代理模式

本篇博客为学习记录,主要来自《大话设计模式》中 第七章 为别人做嫁衣--代理模式。。

在此向大家推荐《大话设计模式》这本书,用故事的方式讲述设计模式,还是很值得一读的。

1、代理模式简介

  代理模式(英语:Proxy Pattern)是程序设计中的一种设计模式。

  所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网上连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。

  定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

2、代理模式应用

 (1)、远程代理。

    也就是为了一个对象在不同的地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实。

 (2)、虚拟代理。

    是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。

 (3)、安全指代。

    用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。

 (4)、智能指引。

    是指当调用真实的对象是时,代理处理另外一些事。

3、代理模式简易代码

共用接口:

/*
创建人:czc
创建时间:2019/12/18
创建用途:代理模式-共用接口
 */

public interface Subject {
    public void Request();
}

真实实体:

/*
创建人:czc
创建时间:2019/12/18
创建用途:代理模式--真实实体
 */

public class RealSubject implements Subject{

    @Override
    public void Request() {
        System.out.println("真实的请求");
    }
}

代理:

/*
创建人:czc
创建时间:2019/12/18
创建用途:代理模式--代理
    RealSubject和Proxy实现了相同的公用接口,则可以通过Proxy实现对RealSubject的真实调用。
 */

public class Proxy implements Subject{

    RealSubject realSubject;

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

模拟访问请求:

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

UML类图:

 

4、总结

  个人觉得代理模式还是较为易懂的。

  引入了代理,从而将外部对于真实实体的请求转化成对于代理对象的请求,这即进一步隐藏了真实实体的内部细节,同时引入代理也能对外部的请求进行进一步的处理。

  这里面需要注意的是需要代理和真实实体实现共用接口,保证在真实实体中有的方法在代理中也有对应的方法能访问到。

吾生也有涯,而知也无涯。

原文地址:https://www.cnblogs.com/hzauxx/p/12063395.html