2.6 策略与简单工厂结合

改造后的CashContext

客户端代码

“嗯,原来简单工厂模式并非只有建一个工厂类的做法,还可以这样子做。此时比刚才的模仿策略模式的写法要清楚多了,客户端代码简单明了。”

“那和你写的简单工厂的客户端代码比呢?观察一下,找出它们的不同之处。”

//简单工厂模式的用法
CashSuper csuper = CashFactory.createCashAccept(cbxType.SelectedItem.ToString());
 
...=csuper.GetResult(...)
//策略模式与简单工厂结合的用法
CashContext csuper =new CashContext(cbxType.SelectedItem.ToString());
 
...=csuper.GetResult(...);

“你的意思是说,简单工厂模式我需要让客户端认识两个类, CashSuper和CashFactory,而策略模式与简单工厂结合的用法,客户端就只需要认识一个类CashContext就可以了。耦合更加降低。”

“说得没错,我们在客户端实例化的是CashContext的对象,调用的是CashContext的方法GetResult,这使得具体的收费算法彻底地与客户端分离。连算法的父类CashSuper都不让客户端认识了。”