初学解释器模式(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不支持部分新流览器问题的解决方案

ASP.NET4中不要相信Request.Browser.Cookies,Form验证要用UseCookies 从ASP.NET 3.5升级至ASP.NET4之后,遇到三种登...

Asp.Net2.0开发功能概览

一、ASP.NET创建网站的两种方式:    文件系统:VS2005新增的模式,不需要安装IIS,使用内置的"ASP.NET程序开发服务器",并且随机给网站分配一个Port。    本地IIS:传统的...
  • fybang
  • fybang
  • 2011年02月03日 10:48
  • 117

asp.net2.0中App_GlobalResources用途

asp.net 2.0中的App_GlobalResources可以用来解决本地化的问题,程序会根据浏览器的语言首选项自动判断显示出本地化的界面。 首先在App_GlobalResources新建r...
  • htqlhy
  • htqlhy
  • 2012年09月18日 17:18
  • 359

ASP.NET2.0中轻松实现网站换肤(App_Themes的使用)

轉:ASP.NET2.0中轻松实现网站换肤(App_Themes的使用)1.简介   新建App_Themes文件夹:    项目 - 右键 - 添加 - 添加ASp.net文件夹 - 主题利用The...

AJAX与callback的区别(续asp.net2.0客户端回调的使用)

====================================================== 注:本文源代码点此下载 =============================...

Asp.net2.0工具包AjaxControlToolkit下载和安装

Asp.net2.0工具包AjaxControlToolkit下载和安装:点击下载 环境设置如下:ITPUB个人空间z;aE{6G@~%J B2ChG(n0下载完 ASPAJA...
  • F7ANTY
  • F7ANTY
  • 2012年08月09日 12:20
  • 1126

asp.net2.0学习历程 菜鸟到中级程序员的飞跃

学历历程如果你是一个菜鸟或者自认为初学者那么本文非常适合你;不能说这30本书就是最佳组合,但是可以说这个组合不差;本人曾博览群书,很多书重复,很多书讲的不适用,这些书都是目前书店可以买到的;达到中级程...

在asp.net2.0中使用Jquery调用Web Service

在asp.net2.0中使用Jquery调用Web Service2009-12-10来源:cnblogs.com 作者:麒麟 点击:569次 介绍:      我们都知道,默认情况下,一个asp.n...
  • hsg77
  • hsg77
  • 2011年06月16日 02:29
  • 944

asp.net2.0之用户成员管理及角色管理

对asp.net2.0关注很久了!!!也使用很久了,但自己在用的时候就是有点懒,不愿意学习其成员管理的机制,用到的时候都是自己写代码控制--就是自己建用户、角色,写代码控制他们之间的关系,以达到在程序...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初学解释器模式(asp.net2.0)
举报原因:
原因补充:

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