说明:继续学习努力
PS:学习自---掘金的JavaScript设计模式核心原理与应用小册
一、概念
定义一系列的算法,把它们一个个封装起来,并且使他们可相互替换
二、案例
代码+需求说明
-
1.案例说明 某电商平台设置不同会员等级购买东西 折扣不一样
青铜会员 原价
白银会员 九折
黄金会员 八折
铂金会员 七折
钻石会员 六折
王者会员 五折 -
2.开发思路 1.用户发送请求获取用户信息 获取到会员等级
2.会员等级参数传递给计算价格的方法,选择计算的规则
3.根据计算规则获取商品总价 -
3.初级写法 v1.0
// @params degree 会员等级 originPrice 原商品总价
function calculateTotal(degree, originPrice){
if (degree === 'bronze') {
return originPrice * 1;
}
if (degree === 'silver') {
return originPrice * 0.9;
}
if (degree === 'gold') {
return originPrice * 0.8;
}
if (degree === 'platnum') {
return originPrice * 0.7;
}
if (degree === 'diamond') {
return originPrice * 0.6;
}
if (degree === 'challenger') {
return originPrice * 0.5;
}
}
// 调用计算等级
const totalPrice = calculateTotal('diamond', 1000);
console.log(totalPrice); // 600
- 4.单一原则 将每个等级计算规则独立出来 v2.0
// 青铜
function bronze(originPrice) {
return originPrice * 1;
}
// 白银
function silver(originPrice) {
return originPrice * 0.9;
}
// 黄金
function gold(originPrice) {
return originPrice * 0.8;
}
// 铂金
function platnum(originPrice) {
return originPrice * 0.7;
}
// 钻石
function diamond(originPrice) {
return originPrice * 0.6;
}
// 王者
function challenger(originPrice) {
return originPrice * 0.5;
}
function calculateTotal(degree, originPrice){
if (degree === 'bronze') {
return bronze(originPrice);
}
if (degree === 'silver') {
return silver(originPrice);
}
if (degree === 'gold') {
return gold(originPrice);
}
if (degree === 'platnum') {
return platnum(originPrice);
}
if (degree === 'diamond') {
return diamond(originPrice);
}
if (degree === 'challenger') {
return challenger(originPrice);
}
}
- 5.验证单一原则,这里我们有些会员等级开放促销 v3.0 例如 钻石会员我们可以添加 先满3000 - 500 然后再进行打折
// 修改对应的钻石会员逻辑
function diamond(originPrice) {
if(originPrice > 3000) {
return (originPrice - 500) * 0.6;
}
return originPrice * 0.6;
}
- 6.完成开放封闭原则 v4.0
// 对象映射
const degreeProcessor = { // 等级处理
bronze(originPrice) { // 青铜
return originPrice * 1;
},
silver(originPrice) { // 白银
return originPrice * 0.9;
},
gold(originPrice) { // 黄金
return originPrice * 0.8;
},
platnum(originPrice) { // 铂金
return originPrice * 0.7;
},
diamond(originPrice) { // 钻石
if(originPrice > 3000) {
return (originPrice - 500) * 0.6;
}
return originPrice * 0.6;
},
challenger(originPrice) { // 王者
return originPrice * 0.5;
}
}
const total = degreeProcessor['diamond'](4000)
console.log(total); // 2100
- 7.添加新的会员等级 黑铁(需给服务费20) v5.0
degreeProcessor.blackIron = function(originPrice) {
return originPrice + 20;
}
const ironPrice = degreeProcessor['blackIron'](1000)
console.log(ironPrice) // 1020
这样子我们构建的代码就完成了