当前位置: 首页 > news >正文

网站建设 佛山市广西建设执业注册中心中心网站

网站建设 佛山市,广西建设执业注册中心中心网站,行业 专业 网站建设,php网站开发实例教程传智作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 定义 解释器模式(Interpreter Pattern&…
作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397)

定义

解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。

特点

给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。

使用场景

编译器、运算表达式计算。

优缺点

(1) 优点
    • 可扩展性比较好,灵活。
    • 增加了新的解释表达式的方式。
    • 易于实现简单文法。
(2) 缺点
    • 可利用场景比较少。
    • 对于复杂的文法比较难维护。
    • 解释器模式会引起类膨胀。
    • 解释器模式采用递归调用方法。

模式结构

    • 定义一个抽象表达式(Expression)接口,它包含了解释方法 interpret(String info)。
    • 定义一个终结符表达式(Terminal Expression)类,它用集合(Set)类来保存满足条件的城市或人,并实现抽象表达式接口中的解释方法 interpret(Stringinfo),用来判断被分析的字符串是否是集合中的终结符。
    • 定义一个非终结符表达式(AndExpressicm)类,它也是抽象表达式的子类,它包含满足条件的城市的终结符表达式对象和满足条件的人员的终结符表达式对象,并实现 interpret(String info) 方法,用来判断被分析的字符串是否是满足条件的城市中的满足条件的人员。
    • 最后,定义一个环境(Context)类,它包含解释器需要的数据,完成对终结符表达式的初始化,并定义一个方法 freeRide(String info) 调用表达式对象的解释方法来对被分析的字符串进行解释。

具体实现

接口和实现

/*** 抽象表达式类*/
interface Expression {/*** 解释*/boolean interpret(String info);
}/*** 非终结符表达式类*/
class AndExpression implements Expression {private Expression city = null;private Expression person = null;public AndExpression(Expression city, Expression person) {this.city = city;this.person = person;}public boolean interpret(String info) {String s[] = info.split("的");return city.interpret(s[0]) && person.interpret(s[1]);}
}/*** 终结符表达式类*/
class TerminalExpression implements Expression {private Set<String> set = new HashSet<>();public TerminalExpression(String[] data) {set.addAll(Arrays.asList(data));}public boolean interpret(String info) {if (set.contains(info)) {return true;}return false;}
}

环境类

/*** 环境类*/
class Context {private String[] cities = {"武汉"};private String[] persons = {"老人", "妇女", "儿童"};private Expression cityPerson;public Context() {Expression city = new TerminalExpression(cities);Expression person = new TerminalExpression(persons);cityPerson = new AndExpression(city, person);}public void freeRide(String info) {boolean ok = cityPerson.interpret(info);if (ok) System.out.println("您是" + info + ",您本次乘车免费!");else System.out.println(info + ",您不是免费人员,本次乘车扣费2元!");}
}

具体使用

/*** 状态模式* 介绍链接:https://www.kdocs.cn/l/ct3ki9na5JMo<pre>文法规则<expression> ::= <city>的<person><city> ::= 武汉<person> ::= 老人|妇女|儿童</pre>
*/
public class App {public static void main(String[] args) {Context bus = new Context();bus.freeRide("武汉的老人");bus.freeRide("武汉的年轻人");bus.freeRide("深圳的妇女");bus.freeRide("深圳的儿童");}
}

实际应用

  1. 存款利息计算(设置好计算规则)
http://www.yayakq.cn/news/795972/

相关文章:

  • 网站开发的未来发展天津手机网站建设
  • 创可贴app海报制作网站绍兴网站建设开发
  • seo网站推广是什么wordpress 登陆后返回
  • 下载asp做网站网站关键词百度排名在下降
  • 房管局备案查询网站快速网站优化服务
  • 怎么做子网站wordpress模板添加主题
  • 什么语言开发网站福州 网站建设 医疗
  • 休闲网站建设建筑人才网平台
  • 网站建设kpi考核专业网站建设代理
  • 北京市建设工程造价管理处 网站建凡网站
  • 博罗做网站哪家强win7怎么做网站服务器吗
  • 同仁微网站建设工作室南王科技:美方裁定公司
  • 华为荣耀手机商城官方网站南京博物馆网站哪家做的
  • 短链接转换网站医药类网站前置审批
  • 河南建设工程质量监督局网站宁波网站制作工具
  • 滴滴网站建设流程图徐州网站的优化
  • 专门做眼镜的国外网站广州网站优化运营
  • 电子商务网站建设培训小结数字营销是什么
  • 哪家做公司网站网络舆情杂志
  • 一个做任务的网站怎么做物流网站
  • 鹤壁网站建设兼职兰州网络推广兰州网络推广
  • 营销型网站建设 多少钱大连网页制作美工
  • 成都市分类信息网站开发中国建设银行网址多少
  • 网站中的文章可以做排名吗wordpress 科技
  • 网站建设的部署淘宝网站建设流程
  • 建设部网站建造师管理号有网站怎么做seo推广
  • 怎么做刷赞网站域名通过了才可以做网站吗
  • 免费网站服务器租用上传视频网站源码
  • 做全景的h5网站黑马程序员线上课程
  • 淄博微网站建设营销助手app