javascript设计模式17装饰者
装饰者模式的作用是为对象动态添加职责,在js中,也可以为函数动态添加职责,为函数添加职责,通过AOP来实现。
var plane = {
fire:function(){
console.log('发射子弹')
}
}
var missileDecorator = function(){
console.log("发射子弹")
}
var atomDecorator = function(){
console.log('发射原子弹')
}
var fire = plane.fire;
// 为对象添加了发射导弹的功能
plane.fire = function(){
fire();
missileDecorator();
}
//通过AOP方式实现
Function.prorotype.before = function(fn){
var _self = this;
return function(){
fn.apply(this,arguments)
return _self.apply(this,arguments)
}
}
Function.prototype.after = function(fn){
var _self = this;
return function(){
var ret = _self.apply(this,arguments)
fn.apply(this,arguments)
return ret;
}
}
///通过AOP实现插件式表单验证
function formSubmit(){
validator();
ajax();
}
function validator(){
//验证逻辑 balabala
return true;
}
formSubmit()
//submit函数承担了两个职责,函数臃肿,职责混乱,没有可复用性。
//使用AOP重构
function formSubmit(){
ajax();
}
formSubmit.before(validator)
formSubmit()
装饰者模式和代理模式的区别
装饰者模式和带来模式结构看起来非常相像,两种模式都描述了怎样为对象提供一定程度上的间接引用,实现部分都保留了对另外一个对象的引用。
所以区别它们的关键在它们的意图和设计目的。代理模式目标是,当直接访问本体不方便或者不符合需要时,为本体提供一个替代者。
而装饰者着眼为为对象动态加入行为。
代理强调一种关系,proxy和它实体之间的关系,这种关系是一种静态关系,在设计之初可能已经确定。
装饰者强调的一开始可能并不能完全确定对象的全部功能,在后续为对象增加功能时,采用包装一层的方式。
Think Different, Make Different-编程是一个习惯

浙公网安备 33010602011771号