zoukankan      html  css  js  c++  java
  • 代理模式

    设计模式之代理模式

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

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

    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、总结

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

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

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

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

  • 相关阅读:
    [leetcode]102. Binary Tree Level Order Traversal二叉树水平遍历
    [leetcode]261. Graph Valid Tree有效树形图
    [leetcode]730. Count Different Palindromic Subsequences计数不同的回文子序列的个数
    [leetcode]516. Longest Palindromic Subsequence最长回文子序列
    [leetcode]698. Partition to K Equal Sum Subsets分割K个等和的子集
    [leetcode]611. Valid Triangle Number有效三角数
    [leetcode]187. Repeated DNA Sequences重复DNA序列
    [leetcode]245. Shortest Word Distance III最短单词距离(word1可能等于word2)
    ios开发 通讯录
    监听键盘
  • 原文地址:https://www.cnblogs.com/hzauxx/p/12063395.html
Copyright © 2011-2022 走看看