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都不让客户端认识了。”