策略模式(Strategy)

Strategy 属于行为模式,用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换,它可以客户端的选择来,决定用什么实现。
Context(上下文环境) 其内组合了一个策略的抽象类,然后具体的实现交给继承策略抽象类的子类去实现。
从上面一句话,可以看到,Strategy 涉及到三个角色:
[b] Context环境角色[/b]:它是使用策略模式的场景,即持有一个策略类。
[b]抽象策略角色:[/b]这是一个抽象角色,通过是由一个接口事抽象类实现,这个类提供所有的具体策略所需的接口。
[b]具体策略(ConcreteStrategy)角色[/b]:实现抽象策略类提供的接口,不同的实现,有不同的具体策略类。

[img]http://dl.iteye.com/upload/attachment/296662/5c16d60e-053f-30ac-943a-cbd42d9c46cb.jpg[/img]


模板可以是这样的:
上下文角色:

public class Context
{
private Strategy strategy;

/**
* 策略方法,算法
*/
public void algorithm()
{
strategy.strategyAlgorithm();
}
}



抽象策略角色:

public abstract class Strategy
{
/**
* 抽象策略方法,算法
*/
public abstract void strategyAlgorithm();

}


具体策略类:



public class ConcreteStrategy extends Strategy
{
   /**
* 策略实现
*/
public void strategyAlgorithm()
{
//different subStrategy have different algorithm
}
}


从这个模板中可以知道:在同一个环境中,抽象策略中只是定义了行为,相同的行为而不同的实现方式交由具体的策略类去实现。

何时使用策略模式:
a.一个系统里面有许多类,但是他们的区别只是他们的行为,那么可以使用Strategy动态让一个对象选择行为的一种。
b.一个系统动态的在几个算法中选择一种。
  c.一个系统的算法使用的数据不可以让客户端知道。
  d.如果一个对象有很多的行为,不用恰当的模式,这些行为就只好使用多重条件选择语句来实现,如果这时使用策略模式可以避免使用难以维护的多重选择语句。

Strategy的优点与缺点:
  a.恰当使用继承,把公用代码移动到父类中,从而避免重复的代码。
  b.策略模式提供了可以替换继承者关系的办法。
  c.避免了多重条件的使用
fault:
a.客户端必须知道理解所有的策略,算法,并自行决定使用哪一个策略类。
  b.会产生很多具体算法的策略实现类,可以使用享元模式来减少对象的数量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值