zoukankan      html  css  js  c++  java
  • 设计模式学习之简单工厂

      最近学习设计模式,这里学到简单工厂模式,现把一个简单计算器的代码写下来!

     第一步,做一个页面,这里只是做一个最简单的页面,重点学习设计模式,所以页面就很简单啦,在这个简单计算器里面,我还加上了Jquery.ajax,把简单工厂和ajax一起学了!

     我们先写好一个运算类,这个类有两个属性,可以当做变量来看,这两个属性就是,就是我要计算的两个运算数,然后再写一个运算方法,这个方法是virtual的,一个虚方法,只返回一个double类型的值,因为我过会要在子类中重写这个方法,这个运算类其实不会做什么,我所做的,都会在子类中去计算:

    运算类如下:

     1  /// <summary>
     2     /// 运算类
     3     /// </summary>
     4    public  class Operation
     5     {
     6         private double numbera;//第一个运算数
     7 
     8         public double Numbera 
     9         {
    10             get { return numbera; }
    11             set { numbera = value; }
    12         }
    13         private double Numberb;//第二个运算数
    14 
    15         public double Numberb1 
    16         {
    17             get { return Numberb; }
    18             set { Numberb = value; }
    19         }
    20         public virtual double GetResult() //运算方法,空,在子类中会重写这个方法
    21         {
    22             double  result = 0;
    23             return result;
    24         }
    25 
    26     }

     写好的运算类后,我们现在开始写加,减,成,除,这4个子类了,这几个类中我们去做各种计算,每个类都继承Operation运算类,这样每个类就都是两个运算数和一个运算方法了
    第一个加法类如下:

    /// <summary>
        /// 加法运算类
        /// </summary>
        class jiafayunsan:Operation 
        {
            public override double GetResult() //重写父类中的运算方法
            {
                double result = 0;
                result = base.Numbera + base.Numberb1; //用父类中的这个参数相加
                return result;
            }
        }

    第二个减法类如下:

    /// <summary>
        /// 减法类
        /// </summary>
        class Operationsub:Operation 
        {
            public override double GetResult()//重写父类中的运算方法
            {
                double result = 0;
                result = base.Numbera - base.Numberb1;//用父类中的这个参数相减
                return result;
            }
        }

    第三个成法类如下:

    /// <summary>
        /// 成法类
        /// </summary>
        class OperationMul:Operation 
        {
            public override double GetResult()//重写父类中的运算方法
            {
                double retult = 0;
                retult = base.Numbera * base.Numberb1;//用父类中的这个参数相成
                return retult;
            }
        }

    第4个除法类如下:

    /// <summary>
        /// 除法类
        /// </summary>
        class OperationDiv:Operation 
        {
            public override double GetResult()//重写父类中的运算方法
            {
                double result = 0;
                if (base.Numbera > 0)
                {
                    result = base.Numbera / Numberb1;//用父类中的这个参数相除
                }
                return result;
            }
        }

    现在这4个类都建好了,他们都继承自Operation运算类,但是现在怎么去用呢?那最重要的事情就要开始了,我们然后就要建一个简单工厂运算类,在这个类中我们去实列化过程,这就是工厂:
    其实在这个工厂类里面,就是我们整个程序最容易变的地方,以后要是还要加更多的,我只要再加一个子类,在这个工厂类里面再一个判断,就行了,这样保证了,不论怎么变,我都不用去改计算的代码了!

    工厂类如下:

     1  /// <summary>
     2     /// 工厂运算类
     3     /// </summary>
     4    public  class JianDanGongchang
     5     {
     6        public static Operation createoperate(string operate)
     7        {
     8            Operation oper = null;
     9 
    10            switch (operate)
    11            { 
    12                case "+":
    13                    oper = new jiafayunsan();//如果是“+”就调用加法类;
    14                    break;
    15                case "-":
    16                    oper = new Operationsub();//如果是“-”就调用减法类;
    17                    break;
    18                case "*":
    19                    oper = new OperationMul();//如果是“*”就调用成法类;
    20                    break;
    21                case "/":
    22                    oper = new OperationDiv();//如果是“/”就调用除法类;
    23                    break;
    24            }
    25            return oper;  
    26        }
    27     }

    后台类写完了,然后我们就开始在前台调了,现在写好页面,新建一个aspx的页面,用JQUERY.POST异步的方式完成计算器,如下

    <head runat="server">
        <title></title>
        <script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function () {
    
                $("#buttons").click(function () {
    
                    var number1 = document.getElementById("number1").value;//第一个运算数
                    var number2 = document.getElementById("number2").value;//第二个运算数
                    var yunsanfu = document.getElementById("Select1").value;//运算符
    
                    //用Jquery.post方法提交
                    $.post("Handler1.ashx", { numbera: number1, numberb: number2, yunsanfus: yunsanfu }, function (date) {
                        document.getElementById("count").value = date;
    
    
                    })
                })
    
            })
        </script>
    </head>
    <body>
       <form id="form1" runat="server">
        <div>
            <input id="number1" type="text" name="name" value="" />
            <select id="Select1">
                <option value="+">+</option>
                 <option value="-">-</option>
                  <option value="*">*</option>
                   <option value="/">/</option>
            </select>
            <input id="number2" type="text" name="name" value="" />
            <input id="buttons" type="button" vale="=" />
            <input id="count" type="text" name="name"  />
        </div>
       </form>
    </body>
    </html>
    

     页面写好了,JS的方法也写好了,然后再建一个ashx页面,在里面来调用简单运算工厂类,完成各种计算,代码如下:

     1  public class Handler1 : IHttpHandler
     2     {
     3 
     4         public void ProcessRequest(HttpContext context)
     5         {
     6             context.Response.ContentType = "text/plain";
     7 
     8             
     9             string numbera = context.Request.Form["numbera"];//第一个数字
    10 
    11             string numberb = context.Request.Form["numberb"];//第二个数字
    12             string numberc = context.Request.Form["yunsanfus"]; //运算符
    13 
    14             Operation oper;
    15             oper = JianDanGongchang.createoperate(numberc);//调用简单运算工厂类,传一个运算符,工厂类会帮你自己计算:
    16 
    17             oper.Numbera = Convert .ToDouble(numbera); //把一个参数传进来
    18             oper.Numberb1 = Convert .ToDouble(numberb);//把第二个参数传进来
    19 
    20             double result = oper.GetResult(); //调用运算方法
    21 
    22             context.Response.Write(result); //返回运算回来的结果,回传给WebForm1.aspx页面。
    23         }
    24         
    25         public bool IsReusable
    26         {
    27             get
    28             {
    29                 return false;
    30             }
    31         }
    32     }

    就这样,一个Jquery ajax加简单工厂的计算器就做完了,这里最重要的是学习简单工厂的设计模式!

  • 相关阅读:
    自增主键强制修改
    网页速度优化
    JS 获取字符串长度, 区别中英文
    SQL时间相关 SQL日期,时间比较
    关于document.cookie的使用
    php文件头部空白影响CSS布局 2
    FlvPlayer 播放器代码
    JAVA——继承、多态、重载和重写转
    JS星级评分,带提示(转)
    web 启动 本地应用程序 Activity
  • 原文地址:https://www.cnblogs.com/xu3593/p/2826314.html
Copyright © 2011-2022 走看看