作者:ivm
之前介绍了 单例模式,观察者模式。今天介绍一个能简化代码,封装算法的超好用模式--策略模式;
《Android 源码设计模式 解析与实战》这本书很棒哦~
今天呢,我换一种方式讲解,先讲一个例子,然后在具体讲解策略模式
例子:需求 出行助手,给定人数,出行方式,要算出具体的钱.
火车 1人50元
长途汽车 1人60元
自驾游 1人75元
很简单吧,再不用策略模式情况下,拥有扩展性的代码:
在这个类中 既能计算火车的出行方式,自驾游的出行方式,长途汽车的出行方式,它的功能不单一,而且代码中有switch—case 或者 if —else if 之类的语句,如果出行方式增加一种,我需要增加一个计算的方法,并且在判断语句中在加一个判断。这种代码,维护性差,当你要增加一种新的方式,就要改判断,会增加出错的可能。
下面我用策略模式写一遍
计算价格是每种方式都有的,我们将它抽象成接口
把每种出行方式独立成一个类 并继承这个接口
最后创建一个计算类
通过设置策略 去分别计算价格,这种写法没有反锁的判断语句,而且更容易更新迭代。
那么正式开始介绍策略模式了
什么是策略模式
定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式独立于使用者而独立变换。
策略模式的使用场景
1.针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。
2.需要安全的封装多种统一类型的操作时
3.出现同一抽象类有多个子类,而又需要使用if —else 或者 switch — case 来选择具体子类时
策略模式的UML 图
角色介绍
1.Context 用来操作策略的上下文环境
2.Stragety 策略的抽象
3.ConcreteStragetA,ConcreteStragetB 具体的策略实现
结语
策略模式 优点就是 结构清晰明了、使用简单直观,耦合性相对较低、扩展方便、封装更彻底、数据更安全。
缺点是:子类很多 (还记的65535 对你的支配的恐惧么 = =)