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

设计模式学习笔记--解释器模式相关推荐

  1. 设计模式学习笔记——解释器(Interpreter)模式

    设计模式学习笔记--解释器(Interpreter)模式 @(设计模式)[设计模式, 解释器模式, Interpreter] 设计模式学习笔记解释器Interpreter模式 基本介绍 解释器案例 类 ...

  2. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

  3. Java设计模式学习记录-解释器模式

    前言 这次介绍另一个行为模式,解释器模式,都说解释器模式用的少,其实只是我们在日常的开发中用的少,但是一些开源框架中还是能见到它的影子,例如:spring的spEL表达式在解析时就用到了解释器模式,以 ...

  4. 设计模式学习笔记——外观模式

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...

  5. 设计模式学习笔记-原型模式

    一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象: 二.模式中的角色 Prototype:声明一个克隆自身的接口: ConcretePrototype:实现一个克隆自身的操作: ...

  6. 设计模式学习笔记-状态模式

    引言 使用该设计模式的情况:如在场景中的主角甚至是敌人,有N个不同状态:走路,攻击,待机.....,游戏中,这些状态来回切换.有一个明确的状态划分的情况下,此时,是可以使用Switch...case. ...

  7. 设计模式学习笔记-中介模式

    概述:                                                                                                 ...

  8. 设计模式学习笔记——命令模式(Command)

    1.特点:将请求发送者与具体实现者解耦,可对请求排列.取消.重做,支持事务.(多请求,单处理) 2.概念:属于对象的行为模式[GOF95].命令模式又称为行动(Action)模式或交易(Transac ...

  9. 设计模式学习笔记-代理模式

    1. 概述 为其它对象提供一种代理以控制对这个对象的访问. 解决的问题:如果直接访问对象比较困难,或直接访问会给使用者或系统带来一系列问题.这样对于客户端(调用者)来说,就不需要直接与真实对象进行交互 ...

最新文章

  1. ERP顾问在甲方好还是乙方好?
  2. python123登录网页版_Python模拟登录验证码(代码简单)
  3. 全球及中国电子式儿科呼吸机行业发展现状与市场销量调研报告2022版
  4. SQL取出第 m 条到第 n 条记录的方法
  5. 如何获取电脑网站(手机网站)支付宝支付的配置信息(appid、商户私钥、支付宝公钥)
  6. HDU 5392 BC #51
  7. LeetCode 348. 判定井字棋胜负(计数)
  8. Linux 高性能服务器编程——多线程编程
  9. 程序员年薪高达40万,为什么有很多程序员单身?看看网友怎么说!
  10. VBA打开TXT类文件读写相关操作代码
  11. iOS tableview简单动画
  12. RFM模型——构建数据库营销的商业战役!(转)
  13. Java 异常丢失及finally子句
  14. unity三维地图的经纬度如何在二维地图上表示_安全数据分析:数据点—地图—线性回归...
  15. WGAN-GP方法介绍
  16. S32K144_新建KEIL工程
  17. DirextX 11游戏开发(1)
  18. 零基础自学Python好难?学起来很吃力,想放弃?看看别人是怎样学习的
  19. 使用ns2仿真ping
  20. 这样的钓鱼邮件,你会中招吗?

热门文章

  1. BJUI修改详情页的标题内容
  2. flutter - dart基础之map
  3. 计算机二级vfp模拟考试题,计算机等级考试二级VFP模拟练习题[10]
  4. 海信电视服务器暂时不可用,一线也实惠 微星H61M-E35(B3)主板评测
  5. MyEclipse开发教程:使用REST Web Services管理JPA实体(四)
  6. SpringBoot基础入门
  7. ES6版Promise实现,给你不一样的体验
  8. zabbix NFS挂载 监控模板
  9. 《AR与VR开发实战》——2.7 3D物体识别
  10. IOS多线程开发其实很简单