2.5 策略模式实现
“我明白了,”小菜说,“我昨天写的CashSuper就是抽象策略,而正常收费CashNormal、打折收费CashRebate和返利收费CashReturn就是三个具体策略,也就是策略模式中说的具体算法,对吧?”
“是的,来吧,你模仿策略模式的基本代码,改写一下你的程序。”
“其实不麻烦,原来写的CashSuper、CashNormal、CashRebate和CashReturn都不用更改了,只要加一个CashContext类,并改写一下客户端就行了。”
商场收银系统v1.2
代码结构图

CashContext类

客户端主要代码

“大鸟,代码是模仿着写出来了。但我感觉这样子做不又回到了原来的老路了吗,在客户端去判断用哪一个算法?”
“是的,但是你有没有什么好办法,把这个判断的过程从客户端程序转移走呢?”
“转移?不明白,原来我用简单工厂是可以转移的,现在这样子如何做到?”
“难道简单工厂就一定要是一个单独的类吗?难道不可以与策略模式的Context结合?”
“哦,我明白你的意思了。我试试看。”