设计模式(二十):解释器模式

转载请注明作者和出处:https://www.jianshu.com/p/6b0bb7a753d1(https://www.jianshu.com/p/6b0bb7a753d1)

运行平台: Windows

php版本: php7.0

作者简介: 一个本该成为游戏职业选手却被编程耽误的程序员


定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。解释器模式是一种类行为型模式。

角色:

  • 环境角色(PlayContent):定义解释规则的全局信息。
  • 抽象解释器(Empress):定义了部分解释具体实现,封装了一些由具体解释器实现的接口。
  • 具体解释器(MusicNote):实现抽象解释器的接口,进行具体的解释执行。
content;
    }
}

//抽象解释器
abstract class AbstractInterpreter{
    abstract function interpret($content);
}

//具体解释器,实现抽象解释器的抽象方法
class ChineseInterpreter extends AbstractInterpreter{
    function interpret($content){
        for($i=1;$i";break;
                case "1": echo "一
";break; case "2": echo "二
";break; case "3": echo "三
";break; case "4": echo "四
";break; case "5": echo "五
";break; case "6": echo "六
";break; case "7": echo "七
";break; case "8": echo "八
";break; case "9": echo "九
";break; default:echo "其他"; } } } } class EnglishInterpreter extends AbstractInterpreter{ function interpret($content){ for($i=1;$i";break; case "1": echo "one
";break; case "2": echo "two
";break; case "3": echo "three
";break; case "4": echo "four
";break; case "5": echo "five
";break; case "6": echo "six
";break; case "7": echo "seven
";break; case "8": echo "eight
";break; case "9": echo "nine
";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

你可能感兴趣的:(设计模式(二十):解释器模式)