设为首页 加入收藏

TOP

常用的JavaScript设计模式(三)
2016-09-13 12:03:11 】 浏览:942
Tags:常用 JavaScript 设计模式
修改关闭,对扩展开放的原则;


使用策略模式之后:


// 对于vip客户
function vipPrice() {
this.discount = 0.5;
}

vipPrice.prototype.getPrice = function(price) {
  return price * this.discount;
}
// 对于老客户
function oldPrice() {
this.discount = 0.3;
}

oldPrice.prototype.getPrice = function(price) {
return price * this.discount;
}
// 对于普通客户
function Price() {
this.discount = 1;
}

Price.prototype.getPrice = function(price) {
return price ;
}


// 上下文,对于客户端的使用
function Context() {
this.name = '';
this.strategy = null;
this.price = 0;
}

Context.prototype.set = function(name, strategy, price) {
this.name = name;
this.strategy = strategy;
this.price = price;
}
Context.prototype.getResult = function() {
console.log(this.name + ' 的结账价为: ' + this.strategy.getPrice(this.price));
}


var context = new Context();
var vip = new vipPrice();
context.set ('vip客户', vip, 200);
context.getResult(); // vip客户 的结账价为: 100


var old = new oldPrice();
context.set ('老客户', old, 200);
context.getResult(); // 老客户 的结账价为: 60


var Price = new Price();
context.set ('普通客户', Price, 200);
context.getResult(); // 普通客户 的结账价为: 200


通过策略模式,使得客户的折扣与算法解藕,又使得修改跟扩展能独立的进行,不影到客户端或其他算法的使用;


使用场景:


  策略模式最实用的场合就是某个“类”中包含有大量的条件性语句,比如if...else 或者 switch。每一个条件分支都会引起该“类”的特定行为以不同的方式作出改变。以其维


护一段庞大的条件性语句,不如将每一个行为划分为多个独立的对象。每一个对象被称为一个策略。设置多个这种策略对象,可以改进我们的代码质量,也更好的进行单元测试。


模板模式


概念:
定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
通俗的讲,就是将一些公共方法封装到父类,子类可以继承这个父类,并且可以在子类中重写父类的方法,从而实现自己的业务逻辑。


代码实现:


比如前端面试,基本包括笔试,技术面试,领导面试,HR面试等,但是每个公司的笔试题,技术面可能不一样,也可能一样,一样的就继承父类的方法,不一样的就重写父类的方法


var Interview = function(){};
// 笔试
Interview.prototype.writtenTest = function(){
console.log("这里是前端笔试题");
};
// 技术面试
Interview.prototype.technicalInterview = function(){
console.log("这里是技术面试");
};
// 领导面试
Interview.prototype.leader = function(){
console.log("领导面试");
};
// 领导面试
Interview.prototype.HR = function(){
console.log("HR面试");
};
// 等通知
Interview.prototype.waitNotice = function(){
console.log("等通知啊,不知道过了没有哦");
};
// 代码初始化
Interview.prototype.init = function(){
this.writtenTest();
this.technicalInterview();
this.leader();
this.HR();
this.waitNotice();
};


// 阿里巴巴的笔试和技术面不同,重写父类方法,其他继承父类方法。
var AliInterview = function(){};
AliInterview.prototype = new Interview();


// 子类重写方法 实现自己的业务逻辑
AliInterview.prototype.writtenTest = function(){
console.log("阿里的技术题就是难啊");
}
AliInterview.prototype.technicalInterview = function(){
console.log("阿里的技术面就是叼啊");
}
var AliInterview = new AliInterview();
AliInterview.init();


// 阿里的技术题就是难啊
// 阿里的技术面就是叼啊
// 领导面试
// HR面试
// 等通知啊,不知道过了没有哦


应用场景:


  模板模式主要应用在一些代码刚开要一次性实现不变的部分。但是将来页面有修改,需要更改业务逻辑的部分或者重新添加新业务的情况。主要是通过子类来改写父类的情


况,其他不需要改变的部分继承父类。


 


代理模式


概念:


  代理模式的中文含义就是帮别人做事,java script的解释为:把对一个对象的访问, 交给另一个代理对象来操作.


代码实现:


 比如我们公司的补打卡是最后是要交给大boss来审批的,但是公司那么多人,每天都那么多补打卡,那大boss岂不是被这些琐事累死。所以大boss下会有一个助理,来帮


忙做这个审批,最后再将每个月的补打卡统一交给大boss看看就行。


// 补打卡事件
var fillOut = function (lateDate) {


this.lateDate = lateDate;
};


// 这是bigBoss
var bigBoss = function (fillOut) {


this.state = function (isSuccess) {
console.log("忘记打卡的日期为:" + fillOut.lateDate + ", 补打卡状态:" + isSuccess);
}
};
// 助理代理大boss 完成补打卡审批
var proxyAssis = function (fillOut) {

this.state = function (isSuccess) {
(new bigBoss(fillOut)).state(isSuccess); // 替bigBoss审批
}
};


// 调用方法:
var proxyAssis = new proxyAssis(new fillOut("2016-9-11"));
proxyAssi

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java中变量命名和引用变量的一个.. 下一篇C语言常见类型占用字节数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目