前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三分钟理解“简单工厂模式”——设计模式轻松掌握

三分钟理解“简单工厂模式”——设计模式轻松掌握

作者头像
大闲人柴毛毛
发布2018-03-09 11:54:21
8950
发布2018-03-09 11:54:21
举报
文章被收录于专栏:大闲人柴毛毛

实际问题:

由于超市隔三差五就要办促销活动,但每次促销活动的方式不一样,所以需要开发一个软件,营业员只要输入原价再选择活动类型后,就能计算出折扣以后的价钱。

普通人的做法:

mian(){ String input = readLine(); double price = readLine(); switch (input) case "九五折": price = price * 0.95; break; case "满100返50": if(price>=100) price = price - 50; break; case "不打折": break; println("打折后价钱:"+price); }

这样写会有几个问题:

1.若现在增加新的打折方式,就要修改这段代码,这就打破了“开放-封闭”的原则。

2.这段代码不易复用。当这个收银系统的其他地方也需要计算折后价的时候,只能将这段代码复制过去;那如果在维护中发现开发人员把“满100返50”写成了“满10000返50”,这时候就需要改两个地方,非常不便。

所以高级做法是:

1.将这一个个折扣抽象成类,这样方便代码的复用;

2.将对不同折扣的判断从客户程序中转移到被调用类中,从而降低客户程序中代码的复杂度。

高级做法的类图:

1.此时,对促销类型的判断从客户端转移到了Factory类中,从而用户程序只需要给Factory的get促销类()函数传入一个促销名称就能够获取该促销类的对象。

2.代码如上图构造之后,要获取促销类对象,只需要调用:

促销类 促销对象 = Factory.get促销类("促销名称");

折后价 price = 促销对象.getResult(原价);

工厂模式的作用:

工厂是用来管理、创建对象的。

如果一个类会根据情况的不同产生含有不同属性值的对象,或者一个类会根据情况的不同产生不同的子类对象,这时候需要使用工厂模式,在工厂中完成究竟创建哪种类型的对象的判断,客户端只需在Factory.getBean(key)函数中传入一个key,就能够获取对应类型的对象。

因此,工厂模式能够将“客户端对究竟创建何种类型的判断”转移到Factory中,从而减少客户端代码的复杂度,降低服务端与客户端之间的藕合度。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年08月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档