最近工作比较忙,一直没有时间来写文章,今天就简单的写下策略模式。
今天要实现的是一个商场收银软件,当然首先我们会采用上期讲的用简单工厂模式来实现,其具体的实现参考代码http://download.csdn.net/detail/txtfashion/5078259:
那么用简单工厂模式来实现存在什么缺陷呢,因为商场经常性地更改打折额度和返利额度,每次维护或扩展收费方式读要改动这个工厂,以致代码需要重新编译。因此我们需要找到一种适应算法经常改动的模式。下面就要引出策略模式。
策略模式是一组算法,将每个算法都封装起来,并且使他们之间可以互换。此模式让算法的变化,不会影响到使用算法的客户。
策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少算法类与使用算法类之间的耦合。
策略模式的Strategy类层为Context定义了一系列的可重用的算法或行为,继承有足浴析取这些算法中的公共功能。另外,它简化了单元测试,因为每个算法独有自己的类,可以通过自己的接口单独测试。
策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的行为,只要在分析过程中听到需要在不同时间应用不同业务规则,就可以考虑使用策略模式处理这种变化的可能性。但基本的策略模式中,选择用具体的实现的职责有客户端对象承担,并转给策略模式的Context对象。这本身没有解除客户端需要选择判断的压力,而策略模式与简单工厂模式结合后,选择具体的职责也可以有Context来承担,这就最大减轻了了客户端的职责。
策略模式的实现具体见http://download.csdn.net/detail/txtfashion/5090477