zoukankan      html  css  js  c++  java
  • javascript设计模式8

    桥接模式(将抽象与其实现隔离开来,以便二者独立变化)

    function sendInfo(element){
        var id=element.id;
        ajax("GET","info.json?id="+id,function(result){
            //...
        });
        //...
    };

    上例的ajax请求与sendInfo函数可以拆分开

    function sendInfo(element){
        var id=element.id,
        callback=function(result){
            //...
        };
        sendInfoBridge(id,callback);
    }
    function sendInfoBridge(id,callback){
        ajax("GET","info.json?id="+id,function(result){
            callback(result);
        });
    }

     组合模式(用一条命令在多个对象上激发复杂的或递归的行为),组合对象和叶对象

    条件一:存在一批组织成某种层次体系的对象

    条件二:希望对这批对象或其中一部分对象进行操作

    组合对象

    var Composite=new Interface('Composite',['add','remove','getChild']);
    var GalleryItem=new Interface('GalleryItem',['hide','show']);
    var DynamicGallery=function(id){
        this.children=[];
        this.element=document.createElement('div');
        this.element.id=id;
        this.element.className='dynamic-gallery';
    }
    DynamicGallery.prototype={
        add:function(child){
            Interface.ensureImplements(child,Composite,GalleryItem);
            this.children.push(child);
            this.element.appendChild(child.getElement());
        },
        remove:function(child){
            for(var node,i=0;node=this.getChild(i);i++){
                if(node==child){
                    this.children.splice(i,1);
                    break;
                }
            }
            this.element.removeChild(child.getElement());
        },
        getChild:function(i){
            return this.children[i];
        },
        hide:function(){
            for(var node,i=0;node=this.getChild(i);i++){
                node.hide();
            }
            this.element.style.display='none';
        },
        show:function(){
            this.element.style.display='block';
            for(var node,i=0;node=this.getChild(i);i++){
                node.show();
            }
        },
        getElement:function(){
            return this.element;
        }
    };

    叶对象

    var GalleryImage=function(src){
        this.element=dicument.createElement('img');
        this.element.className='gallery-image';
        this.element.src=src;
    }
    GalleryImage.prototype={
        add:function(){},
        remove:function(){},
        getChild:function(){},
        hide:function(){
            this.element.style.display='none';
        },
        show:function(){
            this.element.style.display='';
        },
        getElement:function(){
            return this.element;
        }
    };
    var topGallery=new DynamicGallery('top-gallery');
    topGallery.add(new GalleryImage('/img/image-1.jpg'));
    topGallery.add(new GalleryImage('/img/image-2.jpg'));
    topGallery.add(new GalleryImage('/img/image-3.jpg'));
    var vacationPhotos=new DynamicGallery('vacation-photos');
    for(var i=0;i<30;i++){
        vacationPhotos.add(new GalleryImage('/img/vac/image-'+i+'.jpg'));
    }
    topGallery.add(vacationPhotos);
    topGallery.show();
    vacationPhotos.hide();
  • 相关阅读:
    【linux】which和whereis
    【linux】locate介绍
    【linux】find命令详解
    【linux】umask
    【linux】文件目录说明
    【linux】Linux系统信息查看命令大全
    【linux】mkdir -p命令
    【linux】head&&tail
    【linux】less &&more
    【linux】ls常用参数
  • 原文地址:https://www.cnblogs.com/sdgjytu/p/4229793.html
Copyright © 2011-2022 走看看