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

一、定义

在设定环境中,定义一种规则或者语法,通过解释器来解释规则或者语法的含义.

二、实例:将  二十一    —>    21

2.1 设定我们的环境 Context

 public class Context{public string Input { get; set; }public int Output { get; set; }}

2.2 根据语法来解释

抽象解释器:

 public abstract class Interpreter{public string FlagStr { get; set; }public int Num { get; set; }public abstract int Interpret(Context context);}

具体解释:

二=2

  public class Two : Interpreter{public Two(){FlagStr = "";Num = 2;}public override int Interpret(Context context){return Num;}}

一=1

 public class One : Interpreter{public One(){FlagStr = "";Num = 1;}public override int Interpret(Context context){return Num;}}

十=*10

 public class Tenfold : Interpreter{public Tenfold(){FlagStr = "";Num = 10;}public override int Interpret(Context context){return context.Output*Num;}}

再封装一下:

 public class InterpretPrivoder{public int FormatStr(Context context){foreach (char c in context.Input){switch (c){case '': context.Output += new One().Interpret(context); break;case '': context.Output += new Two().Interpret(context); break;case '': context.Output = new Tenfold().Interpret(context); break;}}return context.Output;}}

其中,未结束符为二和一,结束符为十

客户端:

 //------------------------解释器模式-----------------------Interpreter.Context interpretContext = new Interpreter.Context();interpretContext.Input = "二十一";Interpreter.InterpretPrivoder interpreter = new Interpreter.InterpretPrivoder();interpreter.FormatStr(interpretContext);Console.WriteLine(interpretContext.Output);Console.ReadKey();

结果:

三、总结

解释器模式,实在一种模式经常出现,并不断变化。我们可以使用解释器。

缺点就是容易子类膨胀

 

转载于:https://www.cnblogs.com/sunchong/p/5133911.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8086地址传送指令LEA,LDS,LES

LEA BX,[SI] ;BX<--DS:[SI]内存单元的偏移地址,与该单元中的数据无关 LDS BX,[SI] ;BX<--DS:[si]内存单元中的数据的低16位,DS<--内存单元中数据的高16位 LES BX,[SI] ;BX<--DS:[SI] ,ES<--DS:[SI2] 显然LDS和LES的操作数是32位的(两个字 四个字节 32位) 写个…

MySQL 5.7.10 免安装配置

# 配置环境&#xff1a;windows 64bit # 安装版本&#xff1a;mysql-5.7.10-win32&#xff08;zip archive版本&#xff09; 1. ZIP Archive版是免安装的&#xff0c;只需把mysql-5.7.10-win32.zip解压到安装目录即可。 2. 在D:\Program Files\mysql-5.7.10-win32文件夹下新建配…

Cacti安装教程

CentOS 6.0架设流量监控及集中日志系统第一章、cacti的安装1、 系统的基本设置2、 设置主机名3、 [rootlocalhost ~]# vi /etc/sysconfig/network4、 [rootlocalhost ~]# exit5、 重新登陆6、 [rootGZ-Cacti ~]#7、 安装screen后台运行程序yum -y install screen8、 安装优秀的…

8086条件转移指令JE,JZ

JZ/JE 指令格式 转移条件 说明 JZ/JE 标号 ZF1 等于0或相等转移code segment assume cs:codemov ax,2mov bx,2cmp ax,bxje ok ;如果axbx 进行转移(其实是检测ZF的值进行转移操作);根据ZF1 得出axbx ,所以才有axbx 相等则转移 iout: mov ax,4c00Hint 21H ok: add a…

单片机C语言下LCD多级菜单的一种实现方法

摘要: 介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑、实用的程序模型。 关键词: 液晶显示屏; 多级菜单; 单片机; C 语言; LCD  中图分类号:TP311. 1    文献标识码:B 收稿日期:2005 - 11 - 210  引言 由于C 语…

fortran语法笔记

1&#xff0c;数据类型&#xff0c;fortran支持整形&#xff0c;real型&#xff0c;logical型&#xff0c;char型&#xff0c;复数型。整形分为为长整形和短整形定义长整形的方法 同时声明多个变量的话可以用逗号隔开。 加两个冒号的话可以直接在声明的时候赋值。 fortran是唯一…

8086条件转移指令JNE,JNZ

JNZ/JNE 指令格式 转移条件 说明 JNZ/JNE 标号 ZF0 不等于0或不相等转移code segment assume cs:codemov ax,5mov bx,2cmp ax,bx ;两数比较 不相等则转移 jne ok iout: mov ax,4c00Hint 21H ok: add ax,bxjmp iout code ends endAX0005 BX0002 CX0013 DX0000 SP00…

8086条件转移指令JE/JZ,JNE/JNZ

JE/JZ,JNE,JNZ检测的只是ZF的值,只要ZF满足则进行转移 JE的逻辑含义是相等则转移 但是JE进行操作的是ZF1才执行所有相等则转移是通过CMP指令来配合使用体现出的CMP AX,BX ;ax-bx 结果是否为0 {true ,ZF1} {false ,ZF0} JE OK (ZF1说明两数相等) (ZF…

git 使用手册

git 作为开源项目首选版本管理软件&#xff0c;必然其优势不容小觑&#xff0c;下面总结一下初次解除用到的一些技能 1. 基本命令介绍 git help branch 查看branch帮助文档 git branch -a 列出当前所有分支 git branch good_proj 创建分支good_proj git checkout good_p…

WZY社区

WZY社区是我自己做的一个网站&#xff0c;后面会详细更新&#xff0c;敬请关注&#xff01;转载于:https://www.cnblogs.com/jxldjsn/p/5146682.html

条件转移指令和无条件转移指令练习

无条件转移指令 JMP条件转移指令 JE JNE JB 低于转移(小于) JNB 不低于转移(大于等于) JA 高于转移(大于) JNA不高于转移(小于等于)查找出数据中0&#xff5e;9的无符号数写到itable单元中 0&#xff5e;9 大于等于0 小于等于9 用JNB和JNA最合适不过了 贴代码~assume cs:code,d…

UISearchBar控件

搜索&#xff0c;无疑可以使用UISearchBar控件&#xff01; 那就先了解一下UISearchBar控件吧&#xff01; UISearchBar控件就是要为你完成搜索功能的一个专用控件。它集成了很多你意想不到的功能和特点&#xff01; 首先&#xff0c;还是来普及一下UISearchBar控件API相关的属…

BSA基础数据维护

平台 BSA基础数据维护 。扇区五个字段的内容 本来值为0&#xff0c;经过107上计算解析&#xff0c;得出正常的数值。然后106上报&#xff08;200050&#xff09;&#xff0c;得到回复&#xff08;200051&#xff09;。 查看回复数据&#xff0c;是否有错误。比如提示104 基站拼…

事务 mysql redis

mysql 事务 start transaction; update ... insert ... create table的不行 rollback;//回滚 commit;//提交 redis 事务 multi incrby age 1 //age1 decrby age 2 //age-2 discard //取消执行 (discard 丢弃) exec //执行 ----------------------- watch keyName1 keyName2 ke…

继续说invoke伪指令

.data ;数据段 titleS db helloworld,0 messageS db hello,welcome to win32,0.code ;代码段 start: invoke MessageBox,NULL,offset messageS,offset titleS,MB_OK invoke ExitProcess,NULL end startMASM编译下边invoke 会把参数从右向左入栈并调用CALLinvoke MessageBox,NU…

织梦CMS AJAX分页,可自定义typeid,调取任意内容

第一步&#xff1a; 把下面这段代码放在html的 head之间 <script language"javascript" type"text/javascript" src"{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script> <script language"javascript"> &…

voa 2015 / 4 / 19

potentially – adv. capable of becoming real, a possibility tackle – v. to deal with a difficult problem; in sports, to bring someone down to the ground gap – n., the space between two people or things; a space from which something is missing转载于:https…

API函数MessageBox的参数与返回值

Win32汇编函数的参数,参数类型,返回值都是一个dword类型(4字节) 返回值永远放在EAX中,如超过4个字节则返回一个数据的指针(指向返回值存放的缓冲区地址).data titleS db helloworld,0 messageS db hello,welcome to win32,0.code start:invoke MessageBox,NULL,offset message…

新的征程

2015年4月2日&#xff0c;我来到了我新的东家。 来到这边之后才发现我还真的是山里的农民来到了大城市。发现自己什么都不懂。而且 和 叶小钗 有一段时间一样&#xff0c;工作和生活真的是拧到了一起&#xff0c;成了一段乱麻。周六周末一边在找房租房搬家&#xff0c;但是新同…

Win32高级语法 条件测试语句与分支语句

.if 表达式1 .elseif 表达式2 .else 所以表达式为否 .endf ;if语句结束下面两段程序分别使用汇编语法与高级语法对程序进行条件测试和分支, 弹出对话框当点击"是"弹出对话框提示"click YES",点击"否"弹出对话框提示"click No" 程序的…