上回我们讲到了简单工厂与工厂模式——将相似对象进行归类的设计模式
今天,我们来讲讲
寄生组合式继承的究极解决方案——
原型模式
当然,他也是一种为了创建对象而存在的设计模式。他可以在继承一个对象的基础上再添加自己独有的功能。是不是弥补了Js一定的不足呢?
我们来假设一个场景。我有一个超市,超市内拥有荒墨牛排、卡农可乐
我们在以前可能会这样去书写
确实,可以创建出想要的对象。有想要的参数。那如果我有一百种货品,维护是否就极其不方便了呢?
好,我们接下去看。突然间,荒漠牛排出了二代版本,时间只需要5分钟了!但价格翻了1.5倍。卡农可乐也出了新种类,手工调和碳酸饮品,价格翻了两倍,时间需要5分钟。这时候你会怎么去写呢?
我们来强行修改代码试试
工程师为了尽可能满足善变甲方的要求已经将后续的新版本,紧贴在前个版本的之前。
假设数年后的现在,荒墨牛排已经有8款产品在售,并且他们的价格间有一定的倍数联系。
在某次短期活动,最便宜的打5折,其他产品与之的倍数不变。那你是不是要头疼了,需要一个一个改下去呢?
乘着这个机会,我们正好来复习一下之前学习的两个设计模式,看看能否有混合产物出现呢?
首先,我们用单例模式打下最大的框架,以获取一种物品为准
随后,我们采用 工厂模式 对物品进行原型链维护
之后开始使用原型模式来增加荒漠牛排二代产品和卡农可乐二代产品及其与一代产品相关价值链的代码。
奔跑一下看看控制台印出了什么?
10元即可体验到冰爽的口感中不断传来的由碳酸气泡带来的强烈冲击
随后某一天,荒墨厂家大促,底层产品仅5元。其余品牌保持倍数关系无需调整。
这时,我们只需将荒漠牛排的价格改成5,其他就都影响到啦
这就是原型模式,顺便把之前两种设计模式复习了一下
今天的设计模式,你学会了吗?
请登录后评论
TOP
切换版块
没问题
大神,请问下,如果使用es6的class和extend可以吗,
class huangMoSteak{
constructor(price , time ,version) {
this.price = 30;
this.time = 20;
this.version= "1.0";
}
}
class Square extends Polygon {
constructor(price ,time ,version) {
super(price ,time ,version);
this.name = 'Square';
}
}
代码还是可以再优化的,只是为了这里假定的需求和一些知识点 用这样子的写法。
各位在使用设计模式的同时,一定要以实际出发,并不是设计模式用的越多就是越好的代码。
我们程序员的工作,到最后讲究的是团队合作,是交接
代码是给人看的,千万别为了套设计模式,把本来简单的代码搞的花里糊翘。别人读不懂你的代码,那只起到了反效果