初学解释器模式(asp.net2.0)

原创 2007年09月29日 10:57:00

感觉csdn越来越慢啦,不看好SQLSERVER数据库,

今天看到国人在清华大学出版的<设计模式>中 的一个实例,很简单,也写吧,不知道跟重构书中写的模板函数有什么区别,只能解释叁拾 壹拾 叁圆 壹圆

default.aspx代码:

 

<%...@ Page Language="C#" AutoEventWireup="true" Debug="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>Untitled Page</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
   输入: 
<asp:TextBox ID="txt" runat="server" TextMode="MultiLine"></asp:TextBox><br />
    输出:
<asp:TextBox ID="txt2" runat="server" TextMode="MultiLine"></asp:TextBox>
        
<br />
    
<asp:Button ID="btn" runat="server" Text="提交" />
    
</div>
    
</form>
</body>
</html>

default.aspx.cs代码:

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
public partial class _Default : System.Web.UI.Page 
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        
if (IsPostBack)
        {
            Context context 
= new Context(this.txt.Text);
            List
<Expression> expressions = new List<Expression>();
            expressions.Add(
new OneExpression());
            expressions.Add(
new TenExpression());
            
int intLoop = 0;
            
while (context.Input.Length > 0)
            {
                
foreach (Expression exp in expressions)
                {
                    exp.Interpret(context);
                }
                
//解释不超过13个
                if (intLoop++ > 13)
                    
break;
            }
            
this.txt2.Text = context.Output.ToString();
        }
    }
}

内容,包括解释前后(Context.cs)

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for Context
/// </summary>
public class Context
{
    
private string _Input;
    
private int _Output;
    
public Context(string input)
    {
        _Input 
= input;
    }
    
public string Input
    {
        
get { return _Input; }
        
set { _Input = value; }
    }
    
public int Output
    {
        
get { return _Output; }
        
set { _Output = value; }
    }
}

解释器的抽象类:(Expression.cs)

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for Expression
/// </summary>
public abstract class Expression
{
    
public void Interpret(Context context)
    {
        
if (context.Input.StartsWith(One()))
        {
            context.Output
+=1*Multiply();
            
if (context.Input.Length <= 1)
                
return;
            context.Input
=context.Input.Substring(2);
        }
        
else if(context.Input.StartsWith(Three()))
        {
            context.Output 
+= 3 * Multiply();
            
if (context.Input.Length <= 1)
                
return;
            context.Input
=context.Input.Substring(2);
        }
        
else
        {
            
return;
        }      
    }

    
public abstract int Multiply();
    
public abstract string  Three();
    
public abstract string One();
}

 

"拾"的解释器类:

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/**//// <summary>
/// Summary description for TenExpression
/// </summary>

public class TenExpression:Expression
...{
    
public TenExpression()
    
...{
        
    }


    
public override string Three()
    
...{
        
return "叁拾";
    }


    
public override string One()
    
...{
        
return "壹拾";
    }


    
public override int Multiply()
    
...{
        
return 10;
    }

}

"圆" 的解释器:

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for OneExpression
/// </summary>
public class OneExpression:Expression
{
    
public OneExpression()
    {
        
    }

    
public override string Three()
    {
        
return "叁圆";
    }

    
public override string One()
    {
        
return "壹圆";
    }

    
public override int Multiply()
    {
        
return 1;
    }
}

初学解释器模式(asp.net2.0) [序]

学了几天的解释器模式,总要写点实际的东西 吧,至少跟解释有点关联的,想得太多,就是什么事情都做不了。就开始试着解释cms 中的标签吧。来点简单的标签替换先default.aspx.cs源代码:usin...
  • beimuaihui
  • beimuaihui
  • 2007年10月03日 11:42
  • 559

大话设计模式27----解释器模式

大话设计模式 1 解释器模式(interpreter)结构图 2 对解释器模式的一些解释 概念:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这...
  • qianqin_2014
  • qianqin_2014
  • 2016年07月26日 21:58
  • 346

解释器模式的一个应用

需求做产品的时候,有一个需求:对于一个字符串要在提交之前做校验,但是校验标准需要可配置。最合理的方案就是使用正则表达式+表达式组合。基础数据结构配置的数据结构如下package com.example...
  • pouloghost
  • pouloghost
  • 2015年11月04日 20:47
  • 1451

《Android源码设计模式解析与实战》读书笔记(十)——解释器模式

第十章 化繁为简的翻译机——解释器模式 解释器模式是一种用得比较少的行为型设计模式,它提供了一种解释语言或者说是表达式的方法,该模式定义了一个表达式接口,然后通过该接口解释一个特定的上下文。解释器模式...
  • zgcqflqinhao
  • zgcqflqinhao
  • 2017年05月15日 16:59
  • 290

java/android 设计模式学习笔记(23)---解释器模式

这篇博客我们来介绍一下解释器模式(Interpreter Pattern),也是行为型设计模式之一,是一种用的比较少的设计模式,其提供了一种解释语言的语法或表达式的方式,该模式定义了一个表达式接口,通...
  • zhao_zepeng
  • zhao_zepeng
  • 2016年10月07日 17:40
  • 1170

Java设计模式之解释器模式

概述解释器模式是一种用得比较少的行为型模式.提供了一种解释语言的语法或表达式的方式. 通过定义一个表达式接口,解释一个特定的上下文.定义给定一个语言,解释器模式可以定义出其文法的一种表示,并定义一个...
  • wbwjx
  • wbwjx
  • 2016年09月07日 07:05
  • 1181

设计模式(行为型)之解释器模式(Interpreter Pattern)

访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。访问者模式使得用户可以在不修改现有系...
  • yanbober
  • yanbober
  • 2015年05月06日 17:11
  • 3500

设计模式C++实现(20)——解释器模式

1. 解释器模式(Interpreter Pattern)的定义 (1)定义   给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。   ①文法:即...
  • zang141588761
  • zang141588761
  • 2016年12月06日 10:17
  • 382

C#设计模式之16——解释器模式

C#设计模式之16——解释器模式 有些程序受益于以一种语言来描述其能够执行的操作。解释器模式描述的内容通常包括:定义该种语言的语法,并使用这一语法来解释以该种语言做陈述的语句。 当某个程序要处理多...
  • weixingstudio
  • weixingstudio
  • 2012年03月02日 13:55
  • 2917

asp.net2.0学习历程 菜鸟到中级程序员的飞跃【月儿原创】

asp.net2.0学习历程 菜鸟到中级程序员的飞跃--30本好书点评作者:清清月儿主页:http://blog.csdn.net/21aspnet/          时间:2007.5.16学历历...
  • 21aspnet
  • 21aspnet
  • 2007年05月16日 23:34
  • 57022
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初学解释器模式(asp.net2.0)
举报原因:
原因补充:

(最多只允许输入30个字)