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

    代理模式说明

    说明:顾名思义就是用一个类来代替另一个类来执行方法功能,这个模式跟装饰模式有点相似,不一样的是,代理模式是代替客户初始化被代理对象类,而装饰模式采用接口或初装饰者参数引用的方式来执行的。

    在动态面向对象语言里,代理模式即起到控制修饰被代理类的作用,也对被代理类起到了充分的隐藏保护作用;被代理类只到我们需要时,才被间接初始化调用;

    场景描述:

    很常见到的就是租房子的例子,房客要租房子,房东要把房子租出去,但是房客跟房东都没怎么有空找房子或在家等着有人看房子,就一同去找房屋中介。房东把房间委托给中介代理租售,有合适的人需要时,中介带看房间,交钱租住,这样就帮房东把房间租出去了;房客委托房属中介帮招要求的房间位置条件,中介帮房客找到合房后,两者交钱租住,这样就替房客租到住的地方了;

    实例源码

    按上面的例子来实现;

    1. 房东出租类;

    function Fangdong() {
        this.room = '房间名';
    }
    Fangdong.prototype.chuzu = function() {
        console.log('房东出租房间: ' + this.room);
    }

    2. 中介代理类:

    function Proxy() {
        this.fangdong = new Fangdong();
    }
    
    Proxy.prototype.chuzu = function() {
        this.fangdong.chuzu();
        console.log('出租后收中介费');
    }

    3. 使用方法:

    //房客请中介帮找房子;
    var proxy = new Proxy();
    proxy.chuzu();

    看看上面的使用,被代理类在客户端完全用不着,只要使用Proxy类即可,可以很好使用在那种需要保护某些业务逻辑过程的情景中;使用代理模式,可以很好的保护需要保护的被代理类;

    其他说明

    跟装饰者模式一样,代理模式也很好的体现了面向对象思想的对扩展开放,对修改关闭的原则;

    代理模式,可以使用接口或抽象类来规范共同的接口:(以下提供JAVA方式代理模式)

    1. 抽象类 abstract 方式;

    public abstract class House {
        public void abstract chuzu();
    }
    
    public class Fangdong extends House {
        private String room = 房间名称”;
        @Override
        public void chuzu() {
            System.out.println(room);
        }
    }
    
    public class Proxy extends House {
        private Fangdong fangdong;
        public Proxy() {
            this.fangdong = new Hangdong();
        }
        @Override
        public void chuzu() {
            this.fandong.chuzu();
            System.out.println(出租后交中介费);
        }
    }
    
    //使用
    House house = new Proxy();
    house.chuzu();

    2. 接口 Interface 方式:

    interface House {
        public void chuzu();
    }
    
    public class Fangdong implements House {
        private String room = “房间名称;
        @Override
        public void chuzu() {
            System.out.println(room);
        }
    }
    
    public class Proxy implements House {
        private Fangdong fangdong;
        public Proxy() {
            this.fangdong = new Hangdong();
        }
        @Override
        public void chuzu() {
            this.fandong.chuzu();
            System.out.println(“出租后交中介费”);
        }
    }
    
    //使用
    House house = new Proxy();
    house.chuzu();
  • 相关阅读:
    EChart处理三维数据做图表、多维legend图例处理
    详解Vuex常见问题、深入理解Vuex
    解决vuex在页面刷新后数据丢失的问题
    vue-router路由元信息详解
    修改Nginx与Apache配置参数解决http状态码:413上传文件大小限制问题
    ab.exe使用
    项目经验
    消息队列系列(一):.Net平台下的消息队列介绍
    【转】谈基于SOA的应用系统设计和开发
    2015年12周(2015-03-16~2015-03-22)
  • 原文地址:https://www.cnblogs.com/editor/p/4185706.html
Copyright © 2011-2022 走看看