关闭

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

586人阅读 评论(2) 收藏 举报

感觉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;
    }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:391189次
    • 积分:6268
    • 等级:
    • 排名:第3914名
    • 原创:196篇
    • 转载:121篇
    • 译文:1篇
    • 评论:55条
    文章分类
    最新评论