javascript设计模式交流(五) ——Composite Pattern

本文探讨了组合模式在Web开发中的应用,特别是在JavaScript中如何通过函数组合实现这一模式。通过具体的代码示例展示了如何将多个函数组合成一个函数,进而创建更复杂的业务逻辑。

组合模式是一种应用广泛的模式,在web开发中更是大量使用,Silverlight的很多对象都有Group机制,即是组合模式的典型应用。

组合模式常常被误解为树型结构或者集合,请体会下面两种关系:

  • 一个几何图形是几何图形,几个几何图形的组合仍然是几何图形
  • 一个人是人,但几个人的集合不是人

组合模式适合的正是前者所描述的情形:总体和个体实现了同一个接口。

对任何语言来说,实现组合模式都不是很困难的事。对js来说,组合模式的实现又有很多有趣的特点和方法.

functional组合模式·函数组合

将2个函数组合为一个函数是一个很容易想到的行为,但极少数语言提供这种机制。表面上看js并未提供这种机制,但是实际上只需要给函数添加一个原型方法,就能轻松实现将几个函数组合成一个(剽窃自月影):

Function.prototype.concat = function()
{
    
var funcs = [this].concat(Array.apply([], arguments));
    
    
return function(){
        
var ret = [];
        
for(var i = 0; i < funcs.length; i++)
        {
            
var func = funcs[i] instanceof Function ? funcs[i] : new Function(funcs[i]);
            ret.push(func.apply(
this, arguments));
        }
        
return ret;
    }
}

/*
//用下面代码测试效果
var a = new Function("return 0");
a=a.concat(function(){return 1}, function(){return 2}, function(){return 3});
alert(a());
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值