Javascript设想形式之——代办形式

近来在读《javascript设想形式与开辟实践》,在这里把文中的种种设想形式写出来,以便加深影象,也能够分享给初学者。假如你不相识设想形式,那末强烈推荐你浏览一下这本书,置信它能够推翻你的编程头脑,助你买通任督二脉。

假设有对象A和对象B,代办形式相当于对象C,对对象A举行封装,对象B只需要与对象C举行交换。对象C就是一个替身。简而言之就是用一个对象代表别的一个对象,对应现实生活中的场景就是明星王宝强和经纪人宋喆之间的关联。经纪人能够全权代表明星和客户商洽,末了把商洽效果给明星,明星决议签约与否。

代办形式能够用在图片耽误加载,耽误加载的道理是:先用loading图片替换图片的实在src,建立一个img元素(代办)加载图片的实在src。加载完今后,图片的src替换掉loading。下面就看看代码怎样完成:

myImage = (function(){
    var img = document.createElement("img");
    document.body.appendChild(img);
    return {
        setSrc:function(src){
            img.src = src;
        }
    }
})()
proxyImage = (function(){
    var img = new Image;
    img.onload = function(){
        myImage .setSrc(this.src)
    }
    return {
        setSrc:function(src){
            myImage.setSrc("load.gif");
            img.src = src;
        }
    }
})()
proxyImage.setSrc('http://test.jpg'); 

代办的意义

或许你会以为一个小小的耽误加载何须要用到设想形式?不必代办形式确实也能够做到。那末引入代办形式有什么优点呢?下面我们抛开代办形式,用经常使用的体式格局完成图片耽误加载:

myImage = (function(){
    var img = document.createElement("img");
    document.body.appendChild(img);
    var imgNode = new Image;
    imgNode.onload = function(){
        img.setSrc(this.src)
    }
    return {
        setSrc:function(src){
            img.setSrc("load.gif");
            imgNode.src = src;
        }
    }
})()
myImage.setSrc('http://test.jpg'); 

上面的myImage除了担任加载图片之外,还担任耽误加载。未来网速越来越快,假如有一天不需要耽误加载,那末就需要修正myImage函数。这也违反了面向对象设想准绳中的——单一职责准绳。单一职责准绳请求对象只要一个职责(功用),引发对象变化的缘由也只能有一个,假如对象有多个职责,那末这个对象会变得非常大,引发对象变化的缘由有多个。单一职责也是为了顺序低耦合高内聚。

反观代办形式,myImage只担任加载图片,proxyImage只担任耽误加载,假如今后不需要耽误加载只需要修正挪用体式格局即可。

    原文作者:大象
    原文地址: https://segmentfault.com/a/1190000009706312
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞