设计模式之策略模式学习

        策略模式:它定义了算法家族,分别封装起来,让他么之间可以互相替换。此模式让算法的变化,不会影响使用这些算法的客户。

        在引出策略模式时,讨论了超市收银系统。可以将各种收费项目抽象成几种操作,比如正常收费、打折、返现、返积分。。。对打折来说,之所以可以这样进行抽象因为各种折扣之间存在着相互的联系,故将其抽象为一种。返现、返积分也类似。

       算法本身是一种策略,这些算法可能随时被替换,这就是变化点,而封装变化点是面向对象一种很重要的思维方式。

策略模式是定义了一系列算法的方法,从概念上来看所有这些算法完成相同的工作,只是实现不同。它可以以相同的方式调用所有的算法,减少了各种算法类与使用它的算法类之间的耦合。   

看代码: 

//收费对象虚基类。

//正常收费



 


 



 


       此处觉得有不妥,一旦超市推出另外一些活动,CashContext类中用于switch判断的代码就要修改,程序需要重新编译。这在实际应用中是不可能的。第二章的最后提了一下使用映射可以解决这个问题。但不知映射为何物,拭目以待吧    

       注:此处实现的收费对象类,比书上的多实现了返点类。关于此类不知应该将其归为哪一部分,暂将其放入收费对象类中。但觉得不应该与收费对象类放在一起,应该有另外一个类处理返点。毕竟积分信息的管理对于大型超市来说也是很重要的一部分。

posted on 2012-05-02 23:16  ithzhang  阅读(186)  评论(0)    收藏  举报

导航