web development blog

> 编程 php设计模式之策略模式

php设计模式笔记,第六个是策略模式。策略模式定义一系列的算法,并将每个算法封装起来,而且使他们可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

 

策略模式比较容易理解,涉及的角色:抽象策略类、具体策略类(即是算法类)、使用者类(即是有对具体策略类的引用)。

 

应用场景:问题面临多种情况,无法确定要用那种方式处理即是策略。为了灵活,方便以后扩展,就可以考虑策略模式。

 

模拟问题:针对自己网站会员的用户信息,根据不同群体进行不同活动促销。目前需求就有小学生,中学生,大学生,三个群体。而以后也可能有白领,大鳄等未知群体,或者其他方式的促销。下面是演示代码:

/**
 * php设计模式 之 策略模式
 * @website wmhfly.com
 */

/**
 * 抽象策略类接口
 */
interface IStrategy {
	public function activity();
}

/**
 * 具体策略类
 * 小学生
 */
class PupilsStrategy implements IStrategy {
	/**
	 * 小学生 活动促销
	 * @see IStrategy::activity()
	 */
	public function activity(){
		//do ...
		echo '小学生群体:图书类产品,动漫宣传等。';
	}
}

/**
 * 具体策略类
 * 中学生
 */
class HighStrategy implements IStrategy {
	/**
	 * 中学生 活动促销
	 * @see IStrategy::activity()
	 */
	public function activity(){
		//do ...
		echo '中学生群体:热门小说、电影等';
	}
}

/**
 * 具体策略类
 * 大学生
 */
class UniversityStrategy implements IStrategy {
	/**
	 * 大学生 活动促销
	 * @see IStrategy::activity()
	 */
	public function activity(){
		//do ...
		echo '大学生群体:鲜花礼物,旅游信息等';
	}
}

/**
 * 活动管理类
 */
class Activity {
	
	private $group = null;
	
	/**
	 * 构造函数
	 * @param $activity 具体策略
	 */
	public function __construct($activity){
		$this->group = $activity;
	}
	
	/**
	 * 设置群体
	 * @param $activity 具体策略
	 */
	public function setGroup($activity){
		$this->group = $activity;
	}
	
	/**
	 * 显示活动信息
	 */
	public function display(){
		$this->group->activity();
	}
	
}

/**
 * 策略模式 DEMO
 */
$gp = new Activity(new PupilsStrategy());
$gp->display();
//重设中学生
$gp->setGroup(new HighStrategy());
$gp->display();
//重设大学生
$gp->setGroup(new UniversityStrategy());
$gp->display();

//输入日志
#小学生群体:图书类产品,动漫宣传等。
#中学生群体:热门小说、电影等
#大学生群体:鲜花礼物,旅游信息等

 

策略模式源文件下载.

-留言评论-

  • 留言载入中...

-拍砖-

 

首页|前端技术|编程/php|生活|关于我

Copyright © 2012 wmhfly.com