JavaScript设计模式之----组合模式

javascript设计模式之组合模式

介绍

组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式。使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为。这可以简化粘合性代码,使其更容易维护,而那些复杂行为则被委托给各个对象。
组合模式的好处:

  • 1 你可以用同样的方法处理对象的集合与其中的特定子对象。
  • 2 它可以用来把一批子对象组织成树形结构,并且使整棵树都可以被遍历。

正文

组合模式(Composite)将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

常见的场景有asp.net里的控件机制(即control里可以包含子control,可以递归操作、添加、删除子control),类似的还有DOM的机制,一个DOM节点可以包含子节点,不管是父节点还是子节点都有添加、删除、遍历子节点的通用功能。所以说组合模式的关键是要有一个抽象类,它既可以表示子元素,又可以表示父元素。

场景

    组合模式场景:   -->公司
                            -->财务部门
                                    -->张一
                                    -->张二
                                    -->张三

                            -->销售部门
                                    -->张四
                                    -->张五
                                    -->张六
    实际任务是具体落实到人上去实施的,也就是说
    只有人才具有具体的方法实现




    

    组合模式


    




组合模式的使用场景:

    1 存在一批组织成某种层次体系的对象
    2 希望对这批对象或其中的一部分对象实施一个操作。
    组合模式的特点:
    1 组合模式中只有两种类型对象:组合对象、叶子对象
    2 这两种类型都实现同一批接口
    3 一般我们会在组合对象中调用其方法并隐式调用"下级对象"的方法(这里我们一般采用递归的形式去做)
*/

/*
    组合模式场景:   -->公司
                          -->北京分公司
                                -->财务部门
                                        -->张一
                                        -->张二
                                        -->张三

                                -->销售部门
                                        -->张四
                                        -->张五
                                        -->张六
                          -->南京分公司
                                -->开发部门
                                        -->张7
                                        -->张8
                                        -->张9

                                -->法务部门
                                        -->张10
                                        -->张11
                                        -->张12


    实际任务是具体落实到人上去实施的,也就是说
    只有人才具有具体的方法实现




    

    组合模式2


    



总结

组合模式的使用场景非常明确:

你想表示对象的部分-整体层次结构时;
你希望用户忽略组合对象和单个对象的不同,用户将统一地使用组合结构中的所有对象(方法)
另外该模式经常和装饰者一起使用,它们通常有一个公共的父类(也就是原型),因此装饰必须支持具有add、remove、getChild操作的 component接口。

参考: https://github.com/tcorral/Design-Patterns-in-Javascript/blob/master/Composite/index.html
http://www.cnblogs.com/TomXu/archive/2012/04/12/2435530.html

版权声明:本文为小平果原创文章,转载请注明:http://blog.csdn.net/i10630226

转载于:https://www.cnblogs.com/dingxiaoyue/p/4948240.html

你可能感兴趣的:(javascript,设计模式)