策略模式
策略模式的宗旨:创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,这类方法包含所要执行的算法固定不变的部分,而“策略”包含变化的部分。如下例:
//以乐器发音为例
/**
* 定义一个乐器类
*/
abstract class Instrument
{
public abstract void tune();
}
/**
* 定义一个弦乐器
*/
class StringedInstrument extends Instrument
{
public void tune()
{
System.out.println("the sound of stringed instrument");
}
}
/**
* 管制乐器
*/
class BrassInstrument extends Instrument
{
public void tune()
{
System.out.println("the sound of brass instrument");
}
}
public class StrategyPattern
{
public static void tune(Instrument instrument)
{
instrument.tune();
}
public static void main(String[] args) {
StrategyPattern.tune(new StringedInstrument());
StrategyPattern.tune(new BrassInstrument());
}
}
//上面例子中的策略则是BrassInstrument 和 StringedInstrument
所以说,策略设计模式的理念为以不变(StrategyPattern类中的tune 方法内的固定算法)应对万变的策略(传入方法的参数),故策略模式比较适合变化多,用来调节、实现可能来自不同方向需求,对于不同算法策略的统一处理,做到以不变应万变。
同样可以打一个比方:策略模式的运作方式就好比浏览器处理报文一样,不论你是来自任何网站,任何系统,任何语言开发的,浏览器都不会去关心,比如说 jsp系统和php系统,在浏览器上打开时,不论事先在不同系统中做了什么样处理、数据格式是什么样的,接受到的所有报文最终都将统一处理,最后显示在浏览器界面上。
这就是策略模式,解释的比较简单,还望见谅,如有高见,非常非常愿意聆听见解,请留言~~~
阅读(2003) | 评论(0) | 转发(0) |