![大话设计模式](https://wfqqreader-1252317822.image.myqcloud.com/cover/784/41787784/b_41787784.jpg)
2.3 简单工厂实现
“对的,这里打折基本都是一样的,只要有个初始化参数就可以了。满几送几的,需要两个参数才行,明白,现在看来不麻烦了。”
“面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。打一折和打九折只是形式的不同,抽象分析出来,所有的打折算法都是一样的,所以打折算法应该是一个类。好了,空话已说了太多,写出来才是真的懂。”
大约1个小时后,小菜交出了第三份的作业。
代码结构图
![](https://epubservercos.yuewen.com/13207C/21821972708814406/epubprivate/OEBPS/Images/Figure-P43_78118.jpg?sign=1739593847-t8E3gVm6ym4liRgF0xTM39y6xA4oKZVA-0-22b62afc49eceb03a3e566d7187d043d)
现金收费抽象类
![](https://epubservercos.yuewen.com/13207C/21821972708814406/epubprivate/OEBPS/Images/Figure-P43_78119.jpg?sign=1739593847-XrQc7NUrmq7dUpFRvo50UA377pH1X0tY-0-b738c60966880fe5c8e1c0687245440e)
正常收费子类
![](https://epubservercos.yuewen.com/13207C/21821972708814406/epubprivate/OEBPS/Images/Figure-P43_78120.jpg?sign=1739593847-b7EwNd6Sx5M8VqfrUUo4YwRHzSYFMmzS-0-0e42c52636c4ea1f64326f1818258ae0)
打折收费子类
![](https://epubservercos.yuewen.com/13207C/21821972708814406/epubprivate/OEBPS/Images/Figure-P43_78121.jpg?sign=1739593847-y8glhGunBRMCPc1cpaqA03yllclsG64a-0-f73a1c8b0974f8ed5f370aa7bb9216f3)
返利收费子类
![](https://epubservercos.yuewen.com/13207C/21821972708814406/epubprivate/OEBPS/Images/Figure-P44_78123.jpg?sign=1739593847-GFDaFiN5zV7gFnCsstLTATdICeViQCjG-0-e286b629be52f8074219bd71eefaf672)
现金收费工厂类
![](https://epubservercos.yuewen.com/13207C/21821972708814406/epubprivate/OEBPS/Images/Figure-P44_78124.jpg?sign=1739593847-g6eVtdR7Ry0f5HnprBO9g0VyiuxHl9x8-0-58942aaeadb43c9f9e015b291e259924)
客户端程序主要部分
![](https://epubservercos.yuewen.com/13207C/21821972708814406/epubprivate/OEBPS/Images/Figure-P45_78126.jpg?sign=1739593847-u9eRMLfms40okAN7mAh3L6PQuxgGCXf6-0-f4f75a774c61e055eb588960f45c73e2)
“大鸟,搞定,这次无论你要怎么改,我都可以简单处理就行了。”小菜自信满满地说。
“是吗,我要是需要打五折和满500送200的促销活动,如何办?”
“只要在现金工厂当中加两个条件,在界面的下拉选项框里加两项,就OK了。”
“现金工厂?!你当是生产钞票呀。是收费对象生成工厂才准确。说得不错,如果我现在需要增加一种商场促销手段,满100积分10点,以后积分到一定时候可以领取奖品如何做?”
“有了工厂,何难?加一个积分算法,构造方法有两个参数:条件和返点,让它继承CashSuper,再到现金工厂,哦,不对,是收费对象生成工厂里增加满100积分10点的分支条件,再到界面稍加改动,就行了。”
“嗯,不错。你对简单工厂用得很熟练了嘛。”大鸟接着说:“简单工厂模式虽然也能解决这个问题,但这个模式只是解决对象的创建问题,而且由于工厂本身包括了所有的收费方式,商场是可能经常性地更改打折额度和返利额度,每次维护或扩展收费方式都要改动这个工厂,以致代码需重新编译部署,这真的是很糟糕的处理方式,所以用它不是最好的办法。面对算法的时常变动,应该有更好的办法。好好去研究一下其他的设计模式,你会找到答案的。”
小菜进入了沉思中……