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

    代理: 不方便直接访问某个对象的时候。。

    中间代理会对直接目的对象 更熟悉,有交道。可以时刻监听目的对象的状态。从而从初始对象的“花”传给目的对象。

    代理模式:有单一模式的优点。

    单一原则:仅有一个引起它变化的原因。如果有多个变化引起改变,容易将职责耦合在一块,导致耦合脆弱,低内聚。

    虚拟代理:例子一:图片预加载,(先用菊花先占位,解决页面空白,解决用户体验不好的效果)将设置src与预加载分开了。通常代理模式都有相同的接口。 延迟开销.

    var myImage = (function(){
        var imageNode = document.createElement('img');
        document.body.appendChild( imageNode );
    
        return {
            setSrc: function( src ){
                imageNode.src = src;
            }
        }
    })()
    
    var proxyImage = (function(){ var img = new Image(); img.onload = function(){ myImage.setSrc( this.src ); } return { setSrc: function( src ){ myImage.setSrc('http://xxx.baidu.com/loading.gif'); img.src = src; } } })()

    相同的接口。若干年 想去掉菊花,则直接调用第一个,而不需要改动 耦合的效果。 代理可能只是一个锦上添花的效果。
    myImage.setSrc('http://www.baidu.com/flower.jpg');

    proxyImage.setSrc('http://www.baidu.com/flower.jpg');

    例子二: 合并http请求。

    缓存代理:

    用于ajax缓存请求。

    利用高阶函数创建通用的 缓存代理:

    function createProxyFactory (fn) {
        var cache = [];
        return function () {
            var args = Array.prototype.join.call(arguments, ',');
            if (args in cache) {
                return cache[args];
            }
            cache[args] = fn.apply(this, arguments);
            return cache[args];
        };
    }
  • 相关阅读:
    判断具有某个属性js、jQuery
    新建maven项目,JRE System Library[J2SE-1.5]
    maven多模块搭建
    The POM for * is invalid
    【react】react-bookManager
    【cml】wosi-demo
    关于白盒测试
    【weex】h5weex-example
    【weex】publishTask
    Eslint报错的翻译
  • 原文地址:https://www.cnblogs.com/rainbow661314/p/6934701.html
Copyright © 2011-2022 走看看