php八大设计模式之策略模式
2024-08-31 12:02:19
策略模式提供一个虚拟的整体,根据不同的要求(参数)提供不同的“零件”(调用不同的“零件”实现不同的结果)。
<?php
/**
* 策略模式
* 跟工厂模式差别不大,用到谁就去实例化谁。
*
* 工厂模式,着眼于得到对象,并操作对象。
* 策略模式,着重得到对象某方法的运行结果。
*/
//计算器接口。
interface Math{
public function calc($op1,$op2);
}
//乘法类。
class MathMul implements Math{
public function calc($op1,$op2){
return $op1*$op2;
}
}
//除法类。
class MathDiv implements Math{
public function calc($op1,$op2){
return $op1/$op2;
}
}
////加法类。
class MathAdd implements Math{
public function calc($op1,$op2){
return $op1+$op2;
}
}
////减法类。
class MathDel implements Math{
public function calc($op1,$op2){
return $op1-$op2;
}
}
//我们将这些类组装起来,形成一个对外的虚拟计算器。
class CMath{
protected $calc=null;
public function __construct($type){
$type="Math".$type;
$this->calc=new $type;
}
public function getNum($op1,$op2){
return $this->calc->calc($op1,$op2);
}
}
//模拟前台的运算符。
$arr=['Add','Del','Div','Mul'];
shuffle($arr);
$pop=array_pop($arr);
//根据运算符拿到计算结果。
$c=new CMath($pop);
echo $c->getNum($o=rand(1,100),$p=rand(1,100));
?>
最新文章
- 【原】小玩node+express爬虫-2
- 【GoLang】golang 中 defer 参数的蹊跷
- vi/vim使用小结
- SQL简介
- 【转载】4412开发板、PC、ubuntu通过网线连接
- SignalR 循序渐进
- Grunt打造前端自动化工作流
- Repeater的ItemCommand事件(LinkButton)
- libvirt python binding 变成了一个新项目
- MVC-Easy-UI-datagrid-分页-查询
- 如何使用XE2及更高版本中提供的自定义皮肤(样式)功能
- [笔记]我的Linux入门之路 - 03.Java环境搭建
- 第二周工作总结——NWNU李泓毅
- putty失活不挂起运行
- 详解CorelDRAW中关于群组的操作
- linux route命令详解
- jenkins 后台程序运行
- Kali2.0通过xrdp实现windows远程链接Linux
- SIPp常用脚本之一:register注册
- Maven项目版本继承 – 我必须指定父版本?