策略模式

商场搞活动,周一到周五翻着花样来。算法不同,目标一致(让利促销)。

function monday() {
  // 买一送一
}
function tuesday() {
  // 第二份半价
}
function wednesday() {
  // 三人同行一人免单
}

function joinActivity(day) {
  var map = {
    monday: monday,
    tuesday: tuesday,
    wednesday: wednesday,
    thursday: thursday,
    friday: friday
  };
  return map[day]();
}

joinActivity('monday'); //买一送一

策略&观察者

function Activity() {}
var activity = new Activity();

//模块Day将一些列促销算法注册到activity上
activity.bind('周一', Day.monday);
activity.bind('周二', Day.tuesday);
activity.bind('周三', Day.wednesday);

//activity 只关注店铺开张,并触发对应的事件,其中的具体的操作则不关心。
activity.openShop(function(day) {
  activity.emit(day); // 触发对应的事件
});

你可能感兴趣的:(策略模式)