策略模式

导引

  • 例子1

最近当当打折(当当天天打折=_=),漫画书7折,小说9折,计算机专业书每本少1元。肿么计算?!?

  • 例子2

当当要去海南岛旅行,现在他有几种去的方式,1:游过去(免费!),2:坐船(只要998!),3:坐飞机(1314~)。肿么选择?

以上两个例子,第一个,不管你使用什么方式计算价格,结果就是反正赚钱;第二个,不管你以什么方式去对岸,结果就是你过去了(第一种方式可能过不去……)。

但不管怎么选,这都是达到目的的一种方式方法。

所以,要讲一讲策略模式了!

什么是策略模式?

对象的行为模式

针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使它们能够相互替换。

策略模式使得算法可以再不影响客户端的情况下发生变化。

定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

UML

策略模式UML

角色

  • 环境角色(Context):持有一个Strategy对象的引用,维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。
/**
 * 环境类
 */
public class Context {

    private Strategy strategy;

    public void strategyInterface() {
        strategy.strategyInterface();
    }
}
  • 抽象策略角色:通常由一个接口和抽象类实现,定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。
/**
 * 抽象策略类
 */
abstract class Strategy {

    public abstract void strategyInterface();

}
  • 具体策略角色:包装了相关的算法。
/**
 * 具体策略类
 */
public class ConcreteStrategy extends Strategy {

    @Override
    public void strategyInterface() {
        System.out.println("ConcreteStrategy");
    }

}
优缺点

优点

  1. 策略模式提供了管理相关算法族的办法,恰当的使用继承可以把公共的代码移到父类里面,从而避免重复的代码。

  2. 策略模式提供了可以替换继承关系的办法。

  3. 使用策略模式可以避免使用多重条件转移语句。

缺点

  1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。所以,策略模式只适用于客户端知道所有的算法或行为的情况。

  2. 策略模式造成很多的策略类。

Some things are very important.

策略模式只封装算法。策略模式只封装算法。策略模式只封装算法。

所以客户端得知道所有策略类,也就是所有的选择,什么时候使用由客户端决定。

它所遵循的设计原则:开闭原则!里氏替换原则!

在Android中的使用

  1. 动画

2.TabHost

3.Volley

……

在Android应用很广泛,就不一一列举,大伙儿自己发现去吧。

T_T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值