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