Home » Code » 常见设计模式之——策略模式

常见设计模式之——策略模式

从字面上看,何为策略,要完成一件事,可以按不同情况选择不同的方法,这就是策略。比如去旅游,可以坐火车,可以坐飞机,这就是不同的策略。在策略模式中,主要有以下三种成员:

  • 环境类(Context),比如人,是在人这个载体上发生的事
  • 抽象策略类(Strategy),比如说去旅行,只说去旅行,没说怎么去
  • 具体策略类(ConcreteStrategy),比如坐火车去旅行,或者坐飞机,具体解决问题的方案

代码示例如下:

//虚拟策略类
interface Travel
{
	public function travelToNewYork();
}
//具体策略类1
class TrainTravel implements Travel
{
	public function travelToNewYork()
	{
		echo "我坐火车去纽约旅行</br>";
	}
}
//具体策略类2
class PlaneTravel implements Travel
{
	public function travelToNewYork()
	{
		echo "我坐飞机去纽约旅行</br>";
	}
}
//运行环境类
class PersonContext
{
	private $_strategy;//保存具体策略类

	public function __construct(Travel $trategy)
	{
		$this->_strategy = $trategy;
	}

	public function travelToNewYork()
	{
		$this->_strategy->travelToNewYork();
	}
}

//坐火车去旅游
$person = new PersonContext(new TrainTravel());
$person->travelToNewYork();

//坐飞机去旅游
$person = new PersonContext(new PlaneTravel());
$person->travelToNewYork();

策略模式的意图就是:定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户而变化。

上边这一句确实道出了策略模式的精华!

参考链接:
http://blog.csdn.net/hguisu/article/details/7558249
http://www.cnblogs.com/cdts_change/archive/2010/10/28/1863894.html

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Time limit is exhausted. Please reload CAPTCHA.