装饰者模式(Decorator):在不改变原对象的基础上,通过对其进行包装拓展(添加属性或者方法)使原有对象可以满足用户更复杂的需求。
在原有基础上添加新的功能来满足用户的需求

var decorator = function(input,fn){
    //获取事件源
    var input = document.getElementById(input);
    //如果事件源已经绑定事件
    if(typeof input.onclick === 'function'){
        //缓存事件源原有的回调函数
        var oldClickFn = input.onclick;
        input.onclick = function(){
            //事件源原有回调函数
            oldClickFn()
            fn();
        }
    }else{
        //事件源未绑定事件就直接为事件源添加新增的回调函数
        input.onclick = fu;
    }
}

适配器模式也是对对象的修饰来适配其他对象,与装饰者模式的不同之处在于适配器方法是对原有对象进行适配,添加的方法与原有方法功能大致类似,而装饰者模式提供的方法与原来的方法功能项有区别,使用适配器对新增的方法也是要调用原来的方法,但是在装饰者模式不需要了解对象原有的功能,并且对象原有的方法照样可以原封不动的使用。