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