<?php
/**
* 策略模式:适应于if else过多的情况,根据条件(也就是策略)来做后续处理,不同策略的方法名有一定规则:策略+固定值
* 应用举例:计算器-加减乘除
*/
//计算器接口
interface jsq
{
//计算:加减乘除
public function js($v1, $v2);
}
//加
class jiaJsq implements jsq
{
public function js($v1, $v2)
{
return $v1 + $v2;
}
}
//减
class jianJsq implements jsq
{
public function js($v1, $v2)
{
return $v1 - $v2;
}
}
//乘
class chenJsq implements jsq
{
public function js($v1, $v2)
{
return $v1 * $v2;
}
}
//加
class chuJsq implements jsq
{
public function js($v1, $v2)
{
return $v1 / $v2;
}
}
//虚拟计算器
class vm
{
protected $jsq = null;//真实计算器
//type表示计算的类型
public function __construct($type)
{
if (!in_array($type, array('jia', 'jian', 'chen', 'chu'))) {
echo "不支付的计算<br/>";
die();
}
$type = $type . 'Jsq';
$this->jsq = new $type();
}
public function js($v1, $v2)
{
return $this->jsq->js($v1, $v2);
}
}
//调用
$jsq = new vm('jia');//这个红色的参数就相当于是策略
echo $jsq->js(1,2)."<br/>";
$jsq = new vm('xxx');
echo $jsq->js(1,2);
运行结果:
3
不支付的计算
- 相关文章
- php设计模式-观察者模式及应用场景
- php设计模式-职责链模式及应用场景
- php设计模式-装饰器模式及应用场景
- php设计模式-适配器模式及应用场景
- php设计模式-桥接模式及应用场景举
- php设计模式-单例模式
- php设计模式-工厂模式
- 热门文章
- win7中将文件拷贝到虚拟机linux下
- phpexcel设置行高及列宽,背景颜色,
- rabbitmq无法启动
- intellij idea不显示git push按钮
- php7中使用mongodb的aggregate进行
- laravel页面静态化的方法
- centos7.4 64位下swoole安装及配置
- navicate连接mycat报1184错误
- curl设置超时不起作用(CURLOPT_TIM
- devops-jenkins容器为pending状态
- 好评文章
- phpexcel设置行高及列宽,背景颜色,
- php7中使用mongodb的aggregate进行
- intellij idea打开文件所在文件夹
- windows下使用MongoDB Compass Com
- win7中将文件拷贝到虚拟机linux下
- laravel 中悲观锁 & 乐观锁的使用
- 单点登录sso原理及php实现方式及de
- navicate连接mycat报1184错误
- rabbitmq无法启动
- laravel整合dingo/api方法步骤:jwt
- 我的项目
- 【github】www.github.com/hurong241
- 【码云】gitee.com/hu_rong/projects
- 【docker hub】hub.docker.com/repositories/hurong241
- 【packagist】packagist.org/users/hurong241/packages
- 站点信息
- 建站时间:2011年
- 文章数:623篇
- 浏览数:1357698