概述
解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
这里我们还是以摩托制造厂为例,因工厂工人数量激增,工厂外面的饭店已经无法满足工人的基本餐饮需求,经领导层商议现决定在厂区开设一个食堂。针对不同阶层的员工食堂采取不同就餐区域,分别为 高层领导餐厅、贵宾厅、中基层员工餐厅。针对这个场景在软件工程中我们采用解释器模式实现。
模式结构
- Expression - 抽象表达类
- TerminalExpression - 终结符表达式类
- AndExpression - 非终结符表达式类
- Context - 上下文
UML图例
代码实例
<?php
namespace Interpreter;
/**
* 抽象表达类
* Class Expression
*/
abstract class Expression
{
//待解释信息
abstract public function interpret($info);
}
/**
* 终结符表达式类
* Class TerminalExpression
*/
class TerminalExpression extends Expression
{
private $restaurants = [];
public function __construct(array $restaurants)
{
$this->restaurants = $restaurants;
}
public function interpret($info