android 设计模式 之策略模式

作者:ivm

之前介绍了 单例模式,观察者模式。今天介绍一个能简化代码,封装算法的超好用模式--策略模式;

《Android 源码设计模式 解析与实战》这本书很棒哦~

今天呢,我换一种方式讲解,先讲一个例子,然后在具体讲解策略模式

例子:需求 出行助手,给定人数,出行方式,要算出具体的钱.

火车  1人50元

长途汽车 1人60元

自驾游  1人75元

很简单吧,再不用策略模式情况下,拥有扩展性的代码:

android 设计模式 之策略模式_第1张图片
普通写法

在这个类中 既能计算火车的出行方式,自驾游的出行方式,长途汽车的出行方式,它的功能不单一,而且代码中有switch—case 或者 if —else if 之类的语句,如果出行方式增加一种,我需要增加一个计算的方法,并且在判断语句中在加一个判断。这种代码,维护性差,当你要增加一种新的方式,就要改判断,会增加出错的可能。

下面我用策略模式写一遍

计算价格是每种方式都有的,我们将它抽象成接口

android 设计模式 之策略模式_第2张图片
接口

把每种出行方式独立成一个类 并继承这个接口

android 设计模式 之策略模式_第3张图片
策略类

最后创建一个计算类

android 设计模式 之策略模式_第4张图片
Context类

通过设置策略 去分别计算价格,这种写法没有反锁的判断语句,而且更容易更新迭代。

那么正式开始介绍策略模式了

什么是策略模式

定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式独立于使用者而独立变换。

策略模式的使用场景

1.针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。

2.需要安全的封装多种统一类型的操作时

3.出现同一抽象类有多个子类,而又需要使用if —else 或者 switch — case 来选择具体子类时

策略模式的UML 图

android 设计模式 之策略模式_第5张图片
UML

角色介绍

1.Context 用来操作策略的上下文环境

2.Stragety 策略的抽象

3.ConcreteStragetA,ConcreteStragetB 具体的策略实现

结语

策略模式 优点就是 结构清晰明了、使用简单直观,耦合性相对较低、扩展方便、封装更彻底、数据更安全。

缺点是:子类很多  (还记的65535 对你的支配的恐惧么  = =)

关注公众号 ,获取更多Android资讯


android 设计模式 之策略模式_第6张图片
MAndroid

你可能感兴趣的:(android 设计模式 之策略模式)