201802191355->深入浅出设计模式:c#解析器模式
2018-02-23 21:01
477 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _014解释器模式
{
/// <summary>
/// 表
/// </summary>
public class TranslateDictionary
{
private static readonly Dictionary<string, string> TranslationDictionary = new Dictionary<string, string>()
{
{ "hello","你好"},
{"world","世界"},
};
public static string getChinese(string key)
{
if (TranslationDictionary.ContainsKey(key))
{
return TranslationDictionary[key];<
4000
br />
}
return string.Empty;
}
}
/// <summary>
/// 翻译接口
/// </summary>
public interface IExpressions
{
void Interpret(StringBuilder sb);
}
/// <summary>
/// 文字翻译
/// </summary>
public class WordExpressions : IExpressions
{
private string Value;
public WordExpressions(string value)
{
this.Value = value;
}
public void Interpret(StringBuilder sb)
{
sb.Append(TranslateDictionary.getChinese(Value));
}
}
/// <summary>
/// 符号翻译
/// </summary>
public class SymbolExpressions : IExpressions
{
private string Value;
public SymbolExpressions(string value)
{
this.Value = value;
}
public void Interpret(StringBuilder sb)
{
switch (Value)
{
case ".":
sb.Append("。");
break;
default:
sb.Append(string.Empty);
break;
}
}
}
/// <summary>
/// 翻译工厂
/// </summary>
public class ExpressionsFactory
{
public static string GetChinese(string value)
{
StringBuilder builder = new StringBuilder();
List<IExpressions> expressions = new List<IExpressions>();
string[] elements = value.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in elements)
{
string[] element = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var e in element)
{
expressions.Add(new WordExpressions(e.ToLower()));
}
expressions.Add(new SymbolExpressions("."));
}
foreach (var item in expressions)
{
item.Interpret(builder);
}
return builder.ToString();
}
}
internal class Program
{
private static void Main(string[] args)
{
string str = "Hello World.";
Console.WriteLine(ExpressionsFactory.GetChinese(str));
/*
*
* 解释器模式
*
* 利用list接口的形式将一堆一堆的数据传入去
*
* 然后调用接口方法来解析数据
*
* 最后得到想要的结果
*
* 上边的例子是将一句string分割成一个list<iexpression>
*
* 然后利用iexpression下的解析的方法得到想要的翻译结果
*
*/
Console.ReadKey();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _014解释器模式
{
/// <summary>
/// 表
/// </summary>
public class TranslateDictionary
{
private static readonly Dictionary<string, string> TranslationDictionary = new Dictionary<string, string>()
{
{ "hello","你好"},
{"world","世界"},
};
public static string getChinese(string key)
{
if (TranslationDictionary.ContainsKey(key))
{
return TranslationDictionary[key];<
4000
br />
}
return string.Empty;
}
}
/// <summary>
/// 翻译接口
/// </summary>
public interface IExpressions
{
void Interpret(StringBuilder sb);
}
/// <summary>
/// 文字翻译
/// </summary>
public class WordExpressions : IExpressions
{
private string Value;
public WordExpressions(string value)
{
this.Value = value;
}
public void Interpret(StringBuilder sb)
{
sb.Append(TranslateDictionary.getChinese(Value));
}
}
/// <summary>
/// 符号翻译
/// </summary>
public class SymbolExpressions : IExpressions
{
private string Value;
public SymbolExpressions(string value)
{
this.Value = value;
}
public void Interpret(StringBuilder sb)
{
switch (Value)
{
case ".":
sb.Append("。");
break;
default:
sb.Append(string.Empty);
break;
}
}
}
/// <summary>
/// 翻译工厂
/// </summary>
public class ExpressionsFactory
{
public static string GetChinese(string value)
{
StringBuilder builder = new StringBuilder();
List<IExpressions> expressions = new List<IExpressions>();
string[] elements = value.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in elements)
{
string[] element = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var e in element)
{
expressions.Add(new WordExpressions(e.ToLower()));
}
expressions.Add(new SymbolExpressions("."));
}
foreach (var item in expressions)
{
item.Interpret(builder);
}
return builder.ToString();
}
}
internal class Program
{
private static void Main(string[] args)
{
string str = "Hello World.";
Console.WriteLine(ExpressionsFactory.GetChinese(str));
/*
*
* 解释器模式
*
* 利用list接口的形式将一堆一堆的数据传入去
*
* 然后调用接口方法来解析数据
*
* 最后得到想要的结果
*
* 上边的例子是将一句string分割成一个list<iexpression>
*
* 然后利用iexpression下的解析的方法得到想要的翻译结果
*
*/
Console.ReadKey();
}
}
}
相关文章推荐
- 201802191355->深入浅出设计模式:c#迭代器模式
- 201802262211->深入浅出设计模式:c#备忘录模式
- 201802141601->深入浅出设计模式:c#原型模式
- 201802170025->深入浅出设计模式:c#组合模式
- 201802140000->深入浅出设计模式:c#高并发下单例模式
- 201802282138->深入浅出设计模式:c#访问者模式
- 201802191230->深入浅出设计模式:c#代理模式
- 201802181505->深入浅出设计模式:c#装饰者模式
- 201802181721->深入浅出设计模式:c#享元模式
- 201802272223->深入浅出设计模式:c#状态模式
- 201802121524->深入浅出设计模式:c#简单工厂模式
- 201802141508->深入浅出设计模式:c#创建者模式
- 201802191355->深入浅出设计模式:c#责任链模式
- 201802272238->深入浅出设计模式:c#模板模式
- 201802181537->深入浅出设计模式:c#外观模式
- 201802132228->深入浅出设计模式:c#抽象工厂模式
- 201802151200->深入浅出设计模式:c#适配器模式
- 201802272130->深入浅出设计模式:c#观察者模式
- 201802151313->深入浅出设计模式:c#桥模式
- 深入浅出设计模式(C#版)--策略模式