zoukankan      html  css  js  c++  java
  • <四>读<<大话设计模式>>之代理模式

     

            代理模式我想大家即便不熟悉也都听过吧,从字面意思上看就是替别人干活的,比方代理商。在项目的实际应用中也有非常多地方用到。比方spring通过代理模式生成对象等。

    代理模式的书面定义:为其它对象提供一种代理以控制对这个对象的訪问。

    在某些情况下,一个对象不适合或者不能直接引用还有一个对象,而代理对象能够在client和目标对象之间起到中介的作用。

            在《《大话设计模式》》一书中以一个有男朋友的女孩让“小菜”帮忙修电脑的故事展开的,事实上说白了代理就是帮别人干活的,一般老板不出面,都是小弟帮忙做交易。代理模式非常好理解也非常好懂,那就直接来代码吧

    1、要追求的姑娘

    /*

     * 被追求的女孩

     */

    publicclass Girl {

     

        private String name;

     

        public String getName() {

           returnname;

        }

     

        publicvoid setName(String name) {

           this.name = name;

        }

       

    }

    2、真正的追求者

    /*

     * 真实的追求者

     */

    publicclass Pursuit implements GiveGift {

     

        //礼物当然送给女孩了

        protected Girl girl;

       

        public Pursuit(Girl girl){

           this.girl = girl;

        }

       

        publicvoid giftChocolate() {

           // TODO Auto-generated method stub

           System.out.println("送巧克力给"+girl.getName());

        }

     

        publicvoid giftFlowers() {

           // TODO Auto-generated method stub

           System.out.println("送花给"+girl.getName());

        }

     

    }

    3、代理中间人

    /*

     * 代理类

     */

     

    publicclass Proxy implements GiveGift {

     

        protected Pursuit pursuit;

       

        //毕竟是代理,真正的还是追求者与女孩的联系

        public Proxy(Girl girl){

           pursuit = new Pursuit(girl);

        }

       

        publicvoid giftChocolate() {

           // TODO Auto-generated method stub

           pursuit.giftChocolate();

        }

        //花事实上是追求者的

        publicvoid giftFlowers() {

           // TODO Auto-generated method stub

           pursuit.giftFlowers();

        }

     

    }

    4、client

    publicclass ProxyClient {

     

        /**

         * @param args

         */

        publicstaticvoid main(String[] args) {

           // TODO Auto-generated method stub

     

           Girlgirl = new Girl();

           girl.setName("妹妹");

          

           //真正操作的是代理

           Proxyproxy =  new Proxy(girl);

           proxy.giftChocolate();

           proxy.giftFlowers();

        }

     

    }

     

    代理模式都在什么场合应用呢?(摘自网络)

    1) 远程代理(Remote  Proxy)为一个位于不同的地址空间的对象提供一个本地的代理对象。这个不同的地址空间能够是在同一台主机中,也但是在还有一台主机中,远程代理又叫做大使(Ambassador)
    2) 虚拟代理(Virtual Proxy)依据须要创建开销非常大的对象。假设须要创建一个资源消耗较大的对象。先创建一个消耗相对较小的对象来表示,真实对象仅仅在须要时才会被真正创建。 
    3) 保护代理(Protection Proxy)控制对原始对象的訪问。保护代理用于对象应该有不同的訪问权限的时候。
    4) 智能指引(Smart Reference)代替了简单的指针,它在訪问对象时运行一些附加操作。


    5) Copy-on-Write代理:它是虚拟代理的一种,把复制(克隆)操作延迟到仅仅有在client真正须要时才运行。一般来说,对象的深克隆是一个开销较大的操作,Copy-on-Write代理能够让这个操作延迟。仅仅有对象被用到的时候才被克隆。

     

    总结:本章代理模式非常好理解。代码也非常easy。在这里说一下它的有点吧。职责清晰,真实的角色就是实现实际的业务逻辑。不用关心其它非本职责的事务,通过后期的代理完毕一件完毕事务,附带的结果就是编程简洁清晰。

    代理对象能够在client和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。

    还有就是高扩展性

  • 相关阅读:
    kafka学习3——单机伪集群(window版)
    (转)在阿里云 CentOS 服务器(ECS)上搭建 nginx + mysql + php-fpm 环境
    渗透测试工具sqlmap基础教程
    编译安装nginx后service nginx start 启动不了
    centos6.5上tomcat的安装
    centos6.5上安装淘宝tfs系统
    解决nagios登录不了的问题
    centos6.5上网络不通解决方法
    redis远程密码连接
    centos7上定时将mysql数据导出并且发送到指定的邮箱
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7258551.html
Copyright © 2011-2022 走看看