设计模式学习笔记--解释器模式
1 using System; 2 3 namespace Interpreter 4 { 5 /// <summary> 6 /// 作者:bzyzhang 7 /// 时间:2016/6/3 19:42:24 8 /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9 /// Context说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10 /// </summary> 11 public class Context 12 { 13 private string text; 14 15 public string PlayText 16 { 17 get { return text; } 18 set { text = value; } 19 } 20 } 21 }
View Code
1 using System; 2 3 namespace Interpreter 4 { 5 /// <summary> 6 /// 作者:bzyzhang 7 /// 时间:2016/6/3 19:41:33 8 /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9 /// AbstractExpression说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10 /// </summary> 11 public abstract class AbstractExpression 12 { 13 public void Interpret(Context context) 14 { 15 if (context.PlayText.Length == 0) 16 { 17 return; 18 } 19 else 20 { 21 string playKey = context.PlayText.Substring(0,1); 22 context.PlayText = context.PlayText.Substring(2); 23 double playValue = Convert.ToDouble(context.PlayText.Substring(0,context.PlayText.IndexOf(" "))); 24 context.PlayText = context.PlayText.Substring(context.PlayText.IndexOf(" ")+1); 25 26 Execute(playKey,playValue); 27 } 28 } 29 30 public abstract void Execute(string key,double value); 31 } 32 }
View Code
1 using System; 2 3 namespace Interpreter 4 { 5 /// <summary> 6 /// 作者:bzyzhang 7 /// 时间:2016/6/3 19:59:36 8 /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9 /// Note说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10 /// </summary> 11 public class Note : AbstractExpression 12 { 13 public override void Execute(string key, double value) 14 { 15 string note = ""; 16 switch (key) 17 { 18 case "C": 19 note = "1"; 20 break; 21 case "D": 22 note = "2"; 23 break; 24 case "E": 25 note = "3"; 26 break; 27 case "F": 28 note = "4"; 29 break; 30 case "G": 31 note = "5"; 32 break; 33 case "A": 34 note = "6"; 35 break; 36 case "B": 37 note = "7"; 38 break; 39 } 40 Console.WriteLine("{0}", note); 41 } 42 } 43 }
View Code
1 using System; 2 3 namespace Interpreter 4 { 5 /// <summary> 6 /// 作者:bzyzhang 7 /// 时间:2016/6/3 20:02:48 8 /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9 /// Scale说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10 /// </summary> 11 public class Scale : AbstractExpression 12 { 13 public override void Execute(string key, double value) 14 { 15 string scale = ""; 16 17 switch (Convert.ToInt32(value)) 18 { 19 case 1: 20 scale = "低音"; 21 break; 22 case 2: 23 scale = "中音"; 24 break; 25 case 3: 26 scale = "高音"; 27 break; 28 } 29 30 Console.WriteLine("{0}", scale); 31 } 32 } 33 }
View Code
1 using System; 2 using System.Collections.Generic; 3 4 namespace Interpreter 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 Context context = new Context(); 11 context.PlayText = "O 2 E 0.5 G 0.5 A 3 E 0.5 G 0.5"; 12 13 AbstractExpression exp = null; 14 15 try 16 { 17 while (context.PlayText.Length > 0) 18 { 19 string str = context.PlayText.Substring(0, 1); 20 switch (str) 21 { 22 case "O": 23 exp = new Scale(); 24 break; 25 case "C": 26 case "D": 27 case "E": 28 case "F": 29 case "A": 30 case "B": 31 case "P": 32 exp = new Note(); 33 break; 34 } 35 exp.Interpret(context); 36 } 37 } 38 catch (Exception ex) 39 { 40 Console.WriteLine(ex.Message); 41 } 42 } 43 } 44 }
View Code
转载于:https://www.cnblogs.com/bzyzhang/p/5557487.html
设计模式学习笔记--解释器模式相关推荐
- 设计模式学习笔记——解释器(Interpreter)模式
设计模式学习笔记--解释器(Interpreter)模式 @(设计模式)[设计模式, 解释器模式, Interpreter] 设计模式学习笔记解释器Interpreter模式 基本介绍 解释器案例 类 ...
- 设计模式 - 学习笔记 - 工厂模式Factory Pattern
设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...
- Java设计模式学习记录-解释器模式
前言 这次介绍另一个行为模式,解释器模式,都说解释器模式用的少,其实只是我们在日常的开发中用的少,但是一些开源框架中还是能见到它的影子,例如:spring的spEL表达式在解析时就用到了解释器模式,以 ...
- 设计模式学习笔记——外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...
- 设计模式学习笔记-原型模式
一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象: 二.模式中的角色 Prototype:声明一个克隆自身的接口: ConcretePrototype:实现一个克隆自身的操作: ...
- 设计模式学习笔记-状态模式
引言 使用该设计模式的情况:如在场景中的主角甚至是敌人,有N个不同状态:走路,攻击,待机.....,游戏中,这些状态来回切换.有一个明确的状态划分的情况下,此时,是可以使用Switch...case. ...
- 设计模式学习笔记-中介模式
概述: ...
- 设计模式学习笔记——命令模式(Command)
1.特点:将请求发送者与具体实现者解耦,可对请求排列.取消.重做,支持事务.(多请求,单处理) 2.概念:属于对象的行为模式[GOF95].命令模式又称为行动(Action)模式或交易(Transac ...
- 设计模式学习笔记-代理模式
1. 概述 为其它对象提供一种代理以控制对这个对象的访问. 解决的问题:如果直接访问对象比较困难,或直接访问会给使用者或系统带来一系列问题.这样对于客户端(调用者)来说,就不需要直接与真实对象进行交互 ...
最新文章
- ERP顾问在甲方好还是乙方好?
- python123登录网页版_Python模拟登录验证码(代码简单)
- 全球及中国电子式儿科呼吸机行业发展现状与市场销量调研报告2022版
- SQL取出第 m 条到第 n 条记录的方法
- 如何获取电脑网站(手机网站)支付宝支付的配置信息(appid、商户私钥、支付宝公钥)
- HDU 5392 BC #51
- LeetCode 348. 判定井字棋胜负(计数)
- Linux 高性能服务器编程——多线程编程
- 程序员年薪高达40万,为什么有很多程序员单身?看看网友怎么说!
- VBA打开TXT类文件读写相关操作代码
- iOS tableview简单动画
- RFM模型——构建数据库营销的商业战役!(转)
- Java 异常丢失及finally子句
- unity三维地图的经纬度如何在二维地图上表示_安全数据分析:数据点—地图—线性回归...
- WGAN-GP方法介绍
- S32K144_新建KEIL工程
- DirextX 11游戏开发(1)
- 零基础自学Python好难?学起来很吃力,想放弃?看看别人是怎样学习的
- 使用ns2仿真ping
- 这样的钓鱼邮件,你会中招吗?