日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

大话设计模式--计算器

發布時間:2023/12/16 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大话设计模式--计算器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為一名程序員,必要的總結是不可以缺少的。計劃從現在開始到明年年底將《大話設計模式》這本書中所列舉的設計模式都紀錄一遍用于以后工作的提升!

簡單工廠之計算器

寫這個功能之前,我需要整理一下寫代碼的基本思路:寫程序必須要以能復用,易于維護為原則,一定要使用面向對象的三大特征 封裝繼承和多態。引用《大話設計模式》中的一個例子 在活字印刷出來之前,印刷的模板都是一次性使用的,因此一本書的成本太高,這樣大規模使用是很難實現的。如果放到當今這個以流量為王的時代絕對會被淘汰。 代碼

  • public class Operation

  • {
  • private double _numbA = 0;
  • private double _numbB = 0;
  • public double _NumbA
  • {
  • get
  • {
  • return _numbA;
  • }
  • set
  • {
  • _numbA = value;
  • }
  • }
  • public double _NumbB
  • {
  • get
  • {
  • return _numbB;
  • }
  • set
  • {
  • _numbB = value;
  • }
  • }
  • public virtual double getResult()
  • {
  • double result = 0;
  • return result;
  • }
  • }
  • //上邊是抽象出來其他運算類需要繼承的父類。

    //下邊寫具體實現
    //加法類

  • public class OperationAdd : Operation
  • {
  • public override double getResult()
  • {
  • double result = 0;
  • result = _NumbA + _NumbB;
  • return result;
  • }
  • }
  • //減法類

  • public class OperationSub : Operation
  • {
  • public override double getResult()
  • {
  • double result = 0;
  • result = _NumbA - _NumbB;
  • return result;
  • }
  • }
  • //乘法類

  • public class OperationMulti : Operation
  • {
  • public override double getResult()
  • {
  • double result = 0;
  • result = _NumbA * _NumbB;
  • return result;
  • }
  • }
  • //除法類

  • public class OperationDivde : Operation
  • {
  • public override double getResult()
  • {
  • double result = 0;
  • if (_NumbB == 0)
  • {
  • throw new Exception("除數不能為零!!");
  • }
  • result = _NumbA / _NumbB;
  • return result;
  • }
  • }
  • //后臺類已經寫好了,前臺控制臺程序也好,webform程序也好都可以使用。我是以asp.net webform配合ajax來實現的。 //前臺數據通過ajax傳遞到后臺一般處理性程序(ashx)文件,數據處理后將數據傳遞到前臺。 //在這里需要添加一個ashx類的父類,通過反射的方式簡化調用程序。

    //Parent.ashx中代碼

  • public class Parent : IHttpHandler

  • {
  • private string m_flag;
  • public string Flag
  • {
  • get { return m_flag; }
  • set { m_flag = value; }
  • }
  • public void ProcessRequest(HttpContext context)
  • {
  • if (context.Request["flag"] != null)
  • m_flag = context.Request["flag"].ToString();
  • var methodName = context.Request["flag"];
  • Type objType = this.GetType();
  • MethodInfo method = objType.GetMethod(methodName == null ? "" : methodName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
  • if (method != null)
  • {
  • HttpContext[] objParams = new HttpContext[] { context };
  • method.Invoke(this, objParams);
  • }
  • else
  • {
  • Other(context);
  • }
  • }
  • public virtual void Other(HttpContext context)
  • {
  • }
  • public bool IsReusable
  • {
  • get
  • {
  • return false;
  • }
  • }
  • }
  • //創建調用類,調用類中的代碼

  • public class Caculate : Parent

  • {
  • public void NumOperate(HttpContext context)
  • {
  • var expression = context.Request["expression"];//這里是將用戶的表達式獲取過來
  • var operateFlag = context.Request["operateFlag"].ToCharArray();
  • var ExpreArry = expression.Split(operateFlag);//然后通過用戶輸入的運算符來分割
  • Operation operate = null;
  • switch (operateFlag[0])
  • {
  • case '+':
  • operate = new OperationAdd();
  • break;
  • case '-':
  • operate = new OperationSub();
  • break;
  • case '*':
  • operate = new OperationMulti();
  • break;
  • case '/':
  • operate = new OperationDivde();
  • break;
  • }
  • operate._NumbA = Convert.ToDouble(ExpreArry[0]);//不論是加減乘除都可以使用同一種方式來調用
  • operate._NumbB = Convert.ToDouble(ExpreArry[1]);
  • var result = operate.getResult();
  • context.Response.Write(result);
  • context.Response.End();
  • }
  • }
  • //后臺調用完畢,下邊開始寫前臺調用方式。首先需要引用jQuery文件,然后就可以使用jQuery中的方法了。在這里不展示引用(太簡單)

    //前臺HTML布局 使用的是table布局

  • <body>
  • <table id="caclator">
  • <tr>
  • <td colspan="5">
  • <input type="text" id="txtExpression" />
  • </td>
  • </tr>
  • <tr>
  • <td>
  • <input type="button" value="MC" id="btnMC" />
  • </td>
  • <td>
  • <input type="button" value="MR" id="btnMR" />
  • </td>
  • <td>
  • <input type="button" value="MS" id="btnMS" />
  • </td>
  • <td>
  • <input type="button" value="M+" id="btnMAdd" />
  • </td>
  • <td>
  • <input type="button" value="M-" id="btnMSub" />
  • </td>
  • </tr>
  • <tr>
  • <td>
  • <input type="button" value="←" id="btnBackSpace" />
  • </td>
  • <td>
  • <input type="button" value="CE" id="btnCE" />
  • </td>
  • <td>
  • <input type="button" value="C" id="btnC" />
  • </td>
  • <td>
  • <input type="button" value="±" id="Button4" />
  • </td>
  • <td>
  • <input type="button" value="√" id="Button5" />
  • </td>
  • </tr>
  • <tr>
  • <td>
  • <input type="button" value="7" id="btnNumSeven" />
  • </td>
  • <td>
  • <input type="button" value="8" id="btnNumEight" />
  • </td>
  • <td>
  • <input type="button" value="9" id="btnNumNine" />
  • </td>
  • <td>
  • <input type="button" value="/" id="btnOperDivide" />
  • </td>
  • <td>
  • <input type="button" value="%" id="Button10" />
  • </td>
  • </tr>
  • <tr>
  • <td>
  • <input type="button" value="4" id="btnNumFour" />
  • </td>
  • <td>
  • <input type="button" value="5" id="btnNumFive" />
  • </td>
  • <td>
  • <input type="button" value="6" id="btnNumSix" />
  • </td>
  • <td>
  • <input type="button" value="*" id="btnOperMulti" />
  • </td>
  • <td>
  • <input type="button" value="1/x" id="Button12" />
  • </td>
  • </tr>
  • <tr>
  • <td>
  • <input type="button" value="1" id="btnNumOne" />
  • </td>
  • <td>
  • <input type="button" value="2" id="btnNumTwo" />
  • </td>
  • <td>
  • <input type="button" value="3" id="btnNumThree" />
  • </td>
  • <td>
  • <input type="button" value="-" id="btnOperSub" />
  • </td>
  • <td rowspan="2">
  • <input type="button" value="=" id="btnEques" />
  • </td>
  • </tr>
  • <tr>
  • <td colspan="2">
  • <input type="button" value="0" id="btnNumZero" />
  • </td>
  • <td>
  • <input type="button" value="." id="btnPoint" />
  • </td>
  • <td>
  • <input type="button" value="+" id="btnOperAdd" />
  • </td>
  • </tr>
  • </table>
  • </body>
  • //僅僅實現了+-*/最基本的算法,因此沒有涉及到的按鈕id名稱就沒修改
    //以下是css樣式設置

  • <style type="text/css">
  • input[type='button']
  • {
  • height: 25px;
  • width: 35px;
  • }
  • input[type='button'][value='0']
  • {
  • height: 25px;
  • width: 72px;
  • }
  • input[type='button'][value='=']
  • {
  • height: 52px;
  • width: 35px;
  • }
  • input[type='text']
  • {
  • width: 185px;
  • }
  • </style>
  • //運行圖仿照win7中計算器樣式

    //最后添加jQuery代碼

  • <script type="text/javascript">

  • var expression = ""; //存放用戶表達式
  • var operateFlag = ""; //存放用戶操作 +-*/
  • $(function () {
  • $("#txtExpression").val('');
  • $("#caclator").offset({ top: 300, left: 900 });
  • $.each($("input"), function (i, j) {
  • if (j.id.indexOf("Num") > -1) {
  • $("#" + j.id).click(function () {
  • expression += this.value;
  • $("#txtExpression").val(expression);
  • })
  • }
  • })
  • $.each($("input"), function (i, j) {
  • if (j.id.indexOf("Oper") > -1) {
  • $("#" + j.id).click(function () {
  • expression += this.value;
  • $("#txtExpression").val(expression);
  • if (this.value != ".") {
  • operateFlag = "";
  • operateFlag = this.value;
  • }
  • })
  • }
  • })
  • $("#btnEques").click(function () {
  • var url = "/Handler/Caculate.ashx?t=" + new Date();
  • $.ajax({
  • type: "POST",
  • url: url,
  • data: { flag: "NumOperate", expression: expression, operateFlag: operateFlag },
  • async: false,
  • cache: false,
  • success: function (msg) {
  • expression = "";
  • $("#txtExpression").val(msg);
  • },
  • error: function (msg) {
  • if (msg.status == 500) {
  • alert("錯誤,不允許的操作!");//如果除數為0,那么就會彈出提示信息
  • }
  • }
  • })
  • })
  • })
  • </script>

  • 轉載于:https://my.oschina.net/u/4167097/blog/3079982

    總結

    以上是生活随笔為你收集整理的大话设计模式--计算器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。