策略模式示例

策略模式,可针对不同对象,执行不同的处理(即按各自的策略进行处理)。
一个统一的处理接口
不同的处理方法类实现该接口
主处理方法类通过识别不同的对象(参数中传来的),分别调用相应处理方法类(各自的策略)进行不同的处理

下例中
如果用户等级为1,则按管理员对其进行初始化,设置成管理员权限(添加、删除、修改)
如果用户等级为2,则按VIP对其进行初始化,设置成VIP权限(添加)

 

/** * 用户类 * 1级用户为admin;2级用户为VIP */ class User{ private $_level; //用户等级 private $_authority_arr = array(); //权限 public function __construct($level) { $this->_level = $level; } public function getLevel() { return $this->_level; } public function addAuthority($authority) //添加权限 { $this->_authority_arr[] = $authority; } public function getInformation() //输出该用户信息 { echo '<br />用户等级:'.$this->_level; echo '<br />拥有权限:'; print_r($this->_authority_arr); } } /** * 初始化用户 接口(统一的处理接口) * 定义设置权限方法 */ interface initUser{ function setAuthority($str); //设置权限 } /** * 初始化管理员类 实现 初始化用户接口(不同的处理类) * 实现设置权限方法(拥有“添加、删除、修改”功能的权限) */ class initAdmin implements initUser{ private $_authority = array('添加','删除','修改'); public function setAuthority($user) { foreach($this->_authority as $v) { $user->addAuthority($v); //分别添加相应权限 } } } /** * 初始化VIP类 实现 初始化用户接口(不同的处理类) * 实现设置权限方法(只有“添加”功能的权限) */ class initVIP implements initUser{ private $_authority = array('添加'); public function setAuthority($user) { foreach($this->_authority as $v) { $user->addAuthority($v); //分别添加相应权限 } } } /** * 初始化控制类(主初处理类) * 自动对参数中的各个用户对象,分别进行相应的初始化 */ class initController{ public function __construct($users) { foreach($users as $v) { switch($v->getLevel()) { //如果是1级用户,按“管理员”进行初始化 case 1: $init = new initAdmin(); break; //如果是2级用户,按“VIP”进行初始化 case 2: $init = new initVIP(); break; } $init->setAuthority($v); //初始化权限 } } } /** * 开始测试 */ $user1 = new User(1); //新建一个1级用户(Admin) $user2 = new User(2); //新建一个2级用户(VIP) $user1->getInformation(); //输出用户1信息(尚未初始化) /* 输出 用户等级:1 拥有权限:Array ( ) */ $init = new initController(array($user1, $user2)); //一起初始化 $user1->getInformation(); //输出用户1信息(初始化后) /* 输出: 用户等级:1 拥有权限:Array ( [0] => 添加 [1] => 删除 [2] => 修改 ) */ $user2->getInformation(); //输出用户2信息(初始化后) /* 输出: 用户等级:2 拥有权限:Array ( [0] => 添加 ) */

你可能感兴趣的:(策略模式示例)