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

    最近学习了设计模式当中的代理模式,接下来我就分享一下心得体会。

      一、代理模式的原则

      二、代理模式的应用

      三、代理模式是什么

      四、代理模式的架构图

      五、代理模式在我们公司的应用

      六、总结

      一、代理模式的原则

        目前来说我已经看完了设计模式的前七章了,目前已经学习了四个设计模式以及三个设计原则(四个设计模式分别是简单工厂模式,策略模式,装饰模式,代理模式)。说心里话,无论是哪种设计模式其实无非就是将一个类传送到另一个类中,无论这个类是在另一个类中实例化的方法还是在主函数中实例化的。只是由于在不同的情境中要求不一样罢了。那么代理模式有何特点呢?首先必须简单说一下代理模式至少要包含两个类,我们暂定为类A和类B。类B为类A的代理。好,具体来说我们在主函数中要求类A不能出现,但是同时我们还需要实现类A的功能,这就是代理模式的要求

      二、代理模式的应用

        代理模式有多种应用。第一种是远程代理,就是说两个模块之间采用不同的进程,假如我们定义为模块A和模块B,加入此时模块A向模块B之间传输数据,那么我们就需要在模块B中加入一个模块A的代理。第二种是虚拟代理,举个例子,比如我们在浏览网页的时候,可能文字部分很容易显示出来,但是图片则不然,这是为什么呢?因为图片太大,所以只能放一个代理来记录图片的路径和大小。第三种是安全代理,目的很简单就是权限问题。第四种就是智能代理,这种就是为了在代理中加入一些增删改查等等。

      三、代理模式是什么

        好了,讲完了原则和应用,我们就来说一下代理模式究竟是什么?我个人觉得用书中的例子来解释更好理解。加入我有一个同事小A,他喜欢我另一个同事小C,那么他想通过我的另一个同事小B来送一些鲜花和礼物。好,我们来分析一下,1、小A在程序里面是个隐形角色,换句话说他在主函数是不能出现的,所以我们需要把小A送到小B处初始化。2、那么其中小B虽然是送东西的主题,但是其中真实送东西的人应该是小A,换句话说,小B送东西函数中应该是小A的函数。好了,只要把握了这两个原则,代理模式基本就是解决了。

      四、代理模式的架构图

        这里我就不画了,直接用书上的图来说明就好了。

    这个图基本可以概括代理模式,这里唯一要说的就是Client端和subject之间的关系,为什么还有一个抽象类呢?请大家想一想如果这个代理在不同的客户端实现(比如客户端A或者客户端B),那么我们怎么知道到底数据是传给了客户端A还是客户端B呢?所以需要一个抽象类解决就OK了。

      五、代理模式在我们公司的应用

        我们公司在传递数据的时候采用的就是采用代理模式。这里我举两个类,其一是ItronManager模块,其二是VehicleInfo模块,两个模块是在不同的进程,这里先说明一下我们跨进程通信采用的是binder通信。所以最简单的方法就是通过ItronManager中的某个类直接向VehicleInfo模块传递数据。但是这个问题就是两个模块的耦合度太大,所以这里我们采用代理模式,首先我们定义一个类为ItronManagerProxy类,这个类我们跑到VehicleInfo进程当中。所以我们在传递数据的时候就将数据传递给ItronMangerProxy类,然后,我们写一个接口类IItronManagerProxy类,通过ItronManager的构造函数来调用IItronManagerProxy类,而在子类比如VehicleInfo中找到一个类比如ItronMngReplier类来进程IItronManagerProxy类,那么数据就算是真正传到VehicleInfo中了。

      六、总结

      本文主要介绍了:

      代理模式的原则:主函数中真实模块不能出现,只能出现代理模块,但是要实现真实模块。

      代理模式的应用:远程代理,虚拟代理,安全代理,智能代理。

      以及代理模式的定义,架构以及具体应用。           

  • 相关阅读:
    python开发环境准备
    MacOS X 安装OpenCV3.2
    tensorflow源码分析——BasicLSTMCell
    结对开发求一数组的最大子数组的和
    结对开发读文本中的二维数组求该二维数组最大子数组的和
    随机四则运算的出题程序java
    突现灵感想出较新简单算法实现求一数组最大子数组的和
    四则运算C++版
    Cys_Control(一) 项目搭建
    Cys_Control(二) MButton
  • 原文地址:https://www.cnblogs.com/songyuchen/p/12773412.html
Copyright © 2011-2022 走看看