转载请注明作者和出处:https://www.jianshu.com/p/6b0bb7a753d1(https://www.jianshu.com/p/6b0bb7a753d1)
运行平台: Windows
php版本: php7.0
作者简介: 一个本该成为游戏职业选手却被编程耽误的程序员
定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。解释器模式是一种类行为型模式。
角色:
- 环境角色(PlayContent):定义解释规则的全局信息。
- 抽象解释器(Empress):定义了部分解释具体实现,封装了一些由具体解释器实现的接口。
- 具体解释器(MusicNote):实现抽象解释器的接口,进行具体的解释执行。
<?php
header("Content-type:text/html;Charset=utf-8");
//环境角色,定义要解释的全局内容
class Expression{
public $content;
function getContent(){
return $this->content;
}
}
//抽象解释器
abstract class AbstractInterpreter{
abstract function interpret($content);
}
//具体解释器,实现抽象解释器的抽象方法
class ChineseInterpreter extends AbstractInterpreter{
function interpret($content){
for($i=1;$i<count($content);$i++){
switch($content[$i]){
case '0': echo "零<br>";break;
case "1": echo "一<br>";break;
case "2": echo "二<br>";break;
case "3": echo "三<br>";break;
case "4": echo "四<br>";break;
case "5": echo "五<br>";break;
case "6": echo "六<br>";break;
case "7": echo "七<br>";break;
case "8": echo "八<br>";break;
case "9": echo "九<br>";break;
default:echo "其他";
}
}
}
}
class EnglishInterpreter extends AbstractInterpreter{
function interpret($content){
for($i=1;$i<count($content);$i++){
switch($content[$i]){
case '0': echo "zero<br>";break;
case "1": echo "one<br>";break;
case "2": echo "two<br>";break;
case "3": echo "three<br>";break;
case "4": echo "four<br>";break;
case "5": echo "five<br>";break;
case "6": echo "six<br>";break;
case "7": echo "seven<br>";break;
case "8": echo "eight<br>";break;
case "9": echo "nine<br>";break;
default:echo "others";
}
}
}
}
//封装好的对具体解释器的调用类,非解释器模式必须的角色
class Interpreter{
private $interpreter;
private $content;
function __construct($expression){
$this->content = $expression->getContent();
if($this->content[0] == "Chinese"){
$this->interpreter = new ChineseInterpreter();
}else{
$this->interpreter = new EnglishInterpreter();
}
}
function execute(){
$this->interpreter->interpret($this->content);
}
}
//测试
$expression = new Expression();
$expression->content = array("Chinese",3,2,4,4,5);
$interpreter = new Interpreter($expression);
$interpreter->execute();
$expression = new Expression();
$expression->content = array("English",1,2,3,0,0);
$interpreter = new Interpreter($expression);
$interpreter->execute();
//结果:
//三
//二
//四
//四
//五
//one
//two
//three
//zero
//zero