設計模式(十五):解釋器模式

一、定義

在設定環境中,定義一種規則或者語法,通過解釋器來解釋規則或者語法的含義.

二、實例:將? 二十一??? —>??? 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.pswp.cn/news/375148.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375148.shtml
英文地址,請注明出處:http://en.pswp.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" 程序的…