设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
http://blog.csdn.net/hguisu/article/details/7558249/
JAVA设计模式:策略模式(你还在使用IF ELSE IF吗?)
http://blog.sina.cn/dpool/blog/s/blog_4b81125f0101m7va.html

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


/**
* 出行旅游
*
* 
*/
interface TravelStrategy{
	public function travelAlgorithm();
} 


/**
 * 具体策略类(ConcreteStrategy)1:乘坐飞机
 */
class AirPlanelStrategy implements TravelStrategy {
	public function travelAlgorithm(){
		echo "travel by AirPlain", "<BR>\r\n"; 
	}
} 


/**
 * 具体策略类(ConcreteStrategy)2:乘坐火车
 */
class TrainStrategy implements TravelStrategy {
	public function travelAlgorithm(){
		echo "travel by Train", "<BR>\r\n"; 
	}
} 

/**
 * 具体策略类(ConcreteStrategy)3:骑自行车
 */
class BicycleStrategy implements TravelStrategy {
	public function travelAlgorithm(){
		echo "travel by Bicycle", "<BR>\r\n"; 
	}
} 



/**
 * 
 * 环境类(Context):用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。
 * 算法解决类,以提供客户选择使用何种解决方案:
 */
class PersonContext{
	private $_strategy = null;

	public function __construct(TravelStrategy $travel){
		$this->_strategy = $travel;
	}
	/**
	* 旅行
	*/
	public function setTravelStrategy(TravelStrategy $travel){
		$this->_strategy = $travel;
	}
	/**
	* 旅行
	*/
	public function travel(){
		return $this->_strategy ->travelAlgorithm();
	}
} 

// 乘坐火车旅行
$person = new PersonContext(new TrainStrategy());
$person->travel();

// 改骑自行车
$person->setTravelStrategy(new BicycleStrategy());
$person->travel();

?>

猜你喜欢

转载自1971161579.iteye.com/blog/2358151