关闭

JS中策略模式变成--面向未来变成

标签: javascript
105人阅读 评论(0) 收藏 举报
分类:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>

<h1>产品最终价格:</h1>
<div id='type'></div>
<div id='mydiv'></div>
</body>
</html>
<script>

//算法家族 --放在同一的命名空间中 
var Price={};

//vip 客户优惠策略类
Price.vipPrice = function() {
    this.discount = 0.5;
    this.getPrice = function(price) {
      return price * this.discount;
    }
}

//老客户优惠策略类:
Price.oldPrice = function() {
    this.discount = 0.3;
    this.getPrice = function(price)
    {
      return price * this.discount;
    }
}

//普通客户
Price.NormlPrice = function() {
    this.discount = 1;
    this.getPrice = function(price)
    {
         return price ;
    }
}


//后台的数据库
// 关系型数据库:oracel  MS SQL SERVER   MYSQL DB2  1:1 1:n
// 1::  班级表 讲师 讲师 和学生





//2. 上下文-  类似工厂模式中工厂
//这里上下文的目的只是方便第三方使用,不用关心算法是怎么实现的,只需要会使用即可
//算法对象的引入是方便我们思考问题,应对客户每日三疯 -- 需求变化频繁
//上下文是方便用户使用方便,封装了算法的细节
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() {
    //alert('123');
    //alert(this.name);
    //alert(this.price);
    //alert(this.strategy.getPrice(this.price));
    document.getElementById('type').innerHTML=this.name;;
    document.getElementById('mydiv').innerHTML=this.strategy.getPrice(this.price);;
    alert(this.strategy.getPrice(this.price));
}



//3. 客户端使用;
// 上下文
var context = new Context();

//vip客户
var vip = new Price.vipPrice();
context.set ('vip客户', vip, 200);
context.getResult();

//老客户
var old = new Price.oldPrice();
context.set ('老客户', old, 200);
context.getResult();

//普通客户
//...



//如果未来针对老顾客的优惠方式变了,只需要修改单个对象,而且修改这个对象不会影响其他对象
//如果未来针对vip的优惠方式变了,只需要修改单个对象
//如果以后客户又疯了,需要新增一种优惠方式,只需要新增一个对象,原来的代码丝毫不影响,也不需要修改



/*=====================================================================*/
//简化写法:
//算法家族 --放在同一的命名空间中 
//vip 客户优惠策略类
//适用于算法函数形式一样
var vipPrice = function(price) {
     return price * 0.5;
}

//老客户优惠策略类:
var oldPrice = function(price) {
     return price * 0.3;
}

//普通客户
var NormlPrice = function(price) {
    return price ;
} 

 var calculatePrice = function( func, price ){
    return func(price);
};

 //使用
var price = calculatePrice(vipPrice,1000);
document.getElementById('mydiv').innerHTML=price;
</script>
0
0
查看评论

js中字符串转换成数组

使用.split(","),分隔符由自己定,此处用的"," 例如: var test = "1,2,q,中文".split(","); alert(test); //-->
  • hanlt
  • hanlt
  • 2016-07-27 10:49
  • 272

js鼠标变成手型

onmouseover="if(true) this.style.cursor='hand';" 或 style="cursor:hand"
  • leejin_521
  • leejin_521
  • 2011-11-04 12:55
  • 2483

Jquery实现鼠标双击Table单元格变成文本框

在jsp的body标签中代码:80 在function中的代码为:   function edit(obj,actualCost,costApplyID){ // var oldhtml = obj.innerHTML;//原单元格里的值 va...
  • zyp630998758
  • zyp630998758
  • 2014-12-11 16:00
  • 587

Js 汉字变成乱码问题

这个可以直接转换编码,如果是utf8的格式,同样可以  最常用的方法也是我的小技巧,一般来说,asp.net默认编码是utf8,只需要用记事本打开JS文件,另存为,然后选择相应的编码,当然asp.net一般都选择utf8编码格式.
  • zhensoft163
  • zhensoft163
  • 2013-07-17 21:17
  • 849

JS字符串变成方法名 及 window["s"] 的使用

var __s = window["s"]; var ss = function(a){__s(a);} function s(s){ alert(s); } 一样可以实现 this.func=new Function(name+"(...
  • zyx13859002783
  • zyx13859002783
  • 2014-04-24 17:14
  • 3288

利用策略模式与装饰模式扩展JavaScript表单验证功能

昨天为了练习策略模式和装饰模式 就写了一个表单验证的小例子 敲得过程中还是遇到了一些问题的 下面就给大家分享一下
  • q1056843325
  • q1056843325
  • 2017-02-14 13:05
  • 1242

js 0变成undefined

今天发现项目里的树状列表都不显示,找了半天原因发现:json串js取值的时候 0都变成了undefined找到原因就可以对症下药了:if(typeof data[i].parentId === &quot;undefined&quot;){判断是否为undefined做处理}具体为啥...
  • weixin_30512027
  • weixin_30512027
  • 昨天 18:04
  • 0

js阿拉伯变成中文数字

js代码[转自网络]function NoToChinese(num) { if (!/^\d*(\.\d*)?$/.test(num)) { alert('Number is wrong!'); return 'Number is wrong!'...
  • elsery
  • elsery
  • 2016-01-25 10:01
  • 940

js分割字符串变成数组

使用split方法切割字符串变成数组<html> <head></head> <body> <script> str = "1,2,3,4,5,6"; //这是一字...
  • qq_31083947
  • qq_31083947
  • 2017-05-31 10:13
  • 730

javascript 将数字转成货币类型( 1000 => ¥1,000.00)

var digitsRE = /(\d{3})(?=\d)/g function currency (value, currency, decimals) { value = parseFloat(value) if (!isFinite(value) || (!value &&a...
  • taoxhsmile
  • taoxhsmile
  • 2017-06-12 14:06
  • 227
    个人资料
    • 访问:24700次
    • 积分:1223
    • 等级:
    • 排名:千里之外
    • 原创:101篇
    • 转载:8篇
    • 译文:0篇
    • 评论:3条
    最新评论