php策略模式,可以单独调用,也可以组合调用

<?php
abstract class Question{
	protected $prompt;
	protected $marker;
	function __construct($prompt,Marker $marker){
		$this->prompt=$prompt;
		$this->marker=$marker;
	}
	function mark($response){
		return $this->marker->mark($response);
	}
}
class TextQuestion extends Question{}
class AVQuestion extends Question{}
abstract class Marker{
	protected $test;
	function __construct($test){
		$this->test=$test;
	}
	abstract function mark($response);
}
class MarkLogicMarker extends Marker{
	private $engine;
	function __construct($test){
		parent::__construct($test);
		$this->engine=new MarkParse($test);
	}
	function mark($response){
		return $this->engine->evaluate($response);
	}
}
class MarkParse extends MarkLogicMarker{
	private $eq;
	function __construct($eq){
		$this->eq=$eq;
	}
	function evaluate($response){
		return ($this->eq + $response);
	}
}
class MatchMarker extends Marker{
	function mark($response){
		return ($this->test==$response);
	}
}
class RegexpMarker extends Marker{
	function mark($response){
		return (preg_match($this->test,$response));
	}
}
$array=array(
	new MatchMarker('five'),
	new RegexpMarker("/f.ve/")
);
foreach($array as $marker){
	$question=new TextQuestion('how',$marker);
	$reclass=get_class($marker);
	foreach(array('five','four') as $val){
		if($reclass=='MatchMarker'){
			if($question->mark($val)){
				echo "{$val}: 两者相等 <br>";
			}else{
				echo "{$val}: 两者不相等 <br>";
			}
		}else if($reclass=='RegexpMarker'){
			if($question->mark($val)){
				echo "{$val}: 匹配到类型 <br>";
			}else{
				echo "{$val}: 未匹配到 <br>";
			}
		}
	}
}
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值