设计模式——策略模式
在进入设计模式这个主题之前,我们先来明确两个问题:第一、什么是设计模式?第二、我们为什么要用设计模式?好,现在我们先来讨论第一个问题,那就是什么是设计模式?设计模式,即Design pattern,是一套被反复使用、多数人知晓、经过分类编目的代码设计经验的总结。注意这个关键字,设计模式是对代码设计经验的总结。(在后面我们会学到三层架构,因此明确这一点便可以很好将二者进行区分。好,言归正传——)。那么,第二个问题,我们究竟为什么要用设计模式呢?我们在进行第一遍学生管理系统和机房收费系统时我们会发现,我们的目的是能够实现窗体预设的功能,而全然不去考虑怎样写更科学,也没有想到复用、维护之类的问题。因为那时我们的头脑里根本就没有那些概念。可是,问题来了!如果,涉及到系统很庞大,我们一个人无法单独完成项目,必须分工合作时;如果我们涉及到做工程做到一半经理把你安排到另一个项目上去,让别人接手你的工程;如果,工程完成后涉及到了后期的维护工作;如果项目做到一半用户临时改变了一些要求….诸如此类,遇到这些状况时,我们怎么办?单纯的做“程序猿”吗?不知疲倦的修改,只会“Ctrl+C”“Ctrl+V”?如果真的是这样的话,那么我们“牺牲”在IT这片热土上估计都不会有人心疼。为什么?因为我们只会机械的复制、粘贴,而没有从代码本身入手。因此,设计模式,便应运而生了!
在谈到设计模式前,需要把设计模式中的几大原则认真学习一下,因为所有的设计模式都是对设计原则的应用.因此,我们应该首先掌握设计模式的几大原则(对此,我有这方面的博客。设计模式中的几大设计原则(一):http://ggddez.blog.163.com/blog/static/184568333201321083815118/ 设计模式中的几大设计原则(二):http://ggddez.blog.163.com/blog/static/184568333201321751159898/ )。好了,下面我们言归正传。接下来的几篇博客中我会介绍几个在设计模式中较为常用的模式。今天介绍的是策略模式。
策略模式的定义:
关于策略模式的定义,原文是这样的:The StrategyPattern defines a family of algorithms(算法),encapsulates(将...封进内部) each one ,and makes theminterchangeable(可互换的)。Strategy lets the algorithm vary(变化)independently from clients(客户) that use it。其实我已经在原句上面把生涩的单词标注上了相应的中文。整句话翻译过来的 意思是:策略模式定义了一个算法家族,分别封装起来,让它们相互之间可以替换,这个模式让算法独立于使用它的客户而独立变化。其实最后一句话“Strategy lets the algorithm vary(变化)independently from clients(客户) that use it”翻译的不是很好,意思就是这个模式让算法的变化不会影响到使用算法的客户,让算法变化和客户使用相独立。
如何理解:
我为什么要用上面那么大的篇幅去介绍策略模式的定义?为的就是能从定义的角度很好的理解什么是策略模式。在我看来,策略模式就是一个对象可能会有很多的行为,这些行为又都是相互独立的,在不同的环境或时间或地点会发生不同的行为。而我们的策略模式就是将这些不同的行为列举出来,分别封装好,相互独立。等对象在特定的时间/环境/地点进行这些行为。
具体例子:
这么说不免有些拗口,下面我举一个例子。比如,有一批货物,可以用火车运,相应的费用为X元/车皮;用轮船运,相应的费用为Y元/船;用货车运,相应的费用为Z元/辆…..我们可以把每种运送方式及收费方式分别封装起来,根据具体的实际情况有选择的进行运送。这种方式就是策略模式。

上面这张结构图就是对上面我举的例子的概述。下面其具体的代码。