【一天一个设计模式】04- 策略模式
时间:2008-11-10
来源:互联网
策略模式(Strategy),将不同情况的算法分拆到不同的类(比如advanceDiscountor类),然后调用者(discountor类)根据具体的情况,用算法类的对象来处理。
例子1
<? php
//打折接口
interface IDiscountor
{
public function getDiscount();
}
------------------------------------------------------------------------------------
//普通用户打折类
class commonDiscountor implements IDiscountor
{
public function getDiscount()
{
$discount = 1;
return $discount;
}
}
//高级用户打折类
class advanceDiscountor implements IDiscountor
{
public function getDiscount()
{
$discount = 0.9;
return $discount;
}
}
//vip用户打折类
class vipDiscountor implements IDiscountor
{
public function getDiscount()
{
$discount = 0.8;
return $discount;
}
}
----------------------------------------------------------------------------------
//打折类
class discountor
{
public function getDiscount($rank)
{
switch ($rank) {
case 'common':
$discountor = new commonDiscountor();
break;
case 'advance':
$discountor = new advanceDiscountor();
break;
case 'vip':
$discountor = new vipDiscountor();
break;
}
return $discountor->getDiscount();
}
}
$discountor = new discountor();
echo $discountor->getDiscount('advance');
?>
例子2
/**
* 定义支持算法的接口
*
*/
abstract class Strategy
{
abstract public function AlgorithmInterface();
}
--------------------------------------------------------------------------------
class ConcreateStratA extends Strategy
{
public function AlgorithmInterface()
{
echo "算法A";
}
}
class ConcreateStratB extends Strategy
{
public function AlgorithmInterface()
{
echo "算法B";
}
}
class ConcreateStratC extends Strategy
{
public function AlgorithmInterface()
{
echo "算法C";
}
}
--------------------------------------------------------------------------------
class Context
{
private $_StrObj;
public function __construct($strobj)
{
$this->_StrObj = $strobj;
}
public function ContextInterface()
{
$this->_StrObj->AlgorithmInterface();
}
}
--------------------------------------------------------------------------------
$context = new Context(new ConcreateStratA);
$context->ContextInterface();
$context = new Context(new ConcreateStratC);
$context->ContextInterface();
$context = new Context(new ConcreateStratB);
$context->ContextInterface();
例子1
<? php
//打折接口
interface IDiscountor
{
public function getDiscount();
}
------------------------------------------------------------------------------------
//普通用户打折类
class commonDiscountor implements IDiscountor
{
public function getDiscount()
{
$discount = 1;
return $discount;
}
}
//高级用户打折类
class advanceDiscountor implements IDiscountor
{
public function getDiscount()
{
$discount = 0.9;
return $discount;
}
}
//vip用户打折类
class vipDiscountor implements IDiscountor
{
public function getDiscount()
{
$discount = 0.8;
return $discount;
}
}
----------------------------------------------------------------------------------
//打折类
class discountor
{
public function getDiscount($rank)
{
switch ($rank) {
case 'common':
$discountor = new commonDiscountor();
break;
case 'advance':
$discountor = new advanceDiscountor();
break;
case 'vip':
$discountor = new vipDiscountor();
break;
}
return $discountor->getDiscount();
}
}
$discountor = new discountor();
echo $discountor->getDiscount('advance');
?>
例子2
/**
* 定义支持算法的接口
*
*/
abstract class Strategy
{
abstract public function AlgorithmInterface();
}
--------------------------------------------------------------------------------
class ConcreateStratA extends Strategy
{
public function AlgorithmInterface()
{
echo "算法A";
}
}
class ConcreateStratB extends Strategy
{
public function AlgorithmInterface()
{
echo "算法B";
}
}
class ConcreateStratC extends Strategy
{
public function AlgorithmInterface()
{
echo "算法C";
}
}
--------------------------------------------------------------------------------
class Context
{
private $_StrObj;
public function __construct($strobj)
{
$this->_StrObj = $strobj;
}
public function ContextInterface()
{
$this->_StrObj->AlgorithmInterface();
}
}
--------------------------------------------------------------------------------
$context = new Context(new ConcreateStratA);
$context->ContextInterface();
$context = new Context(new ConcreateStratC);
$context->ContextInterface();
$context = new Context(new ConcreateStratB);
$context->ContextInterface();
作者: kakashilw 发布时间: 2008-11-10
我怎么觉得这是工厂模式呢?
作者: zwws 发布时间: 2008-11-11
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28