zoukankan      html  css  js  c++  java
  • 两种设计模式(1)==>>“简单工厂”

    我们以做一个计算器为例,给大家介绍简单工厂的应用:

    效果:

    这里我们使用 继承 ,虚方法, 简单工厂的设计模式来完成

    首先,我们除了搭好窗体外,我们应该把我们的一些类准备好:

    1.计算的父类Calculation

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 计算器_简单工厂_
    {
        //父类(虚)  计算类
       public abstract class Calculation
        {
           //第一个操作数
            public double Numleft { get; set; }
           //第二个操作数
            public double NumRight { get; set; }
           //运算符
            public string Operator { get; set; }
           //虚方法
            public abstract double Cal();
        }
    }

    2.然后就是,加,减,乘,除 的子类

      01.加法类 Add 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 计算器_简单工厂_
    {
        //加法
       public class Add:Calculation
        {
           public override double Cal()
            {
                double result = Numleft + NumRight;
                return result;
            }
        }
    }

     02.减法类 Sub

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 计算器_简单工厂_
    {
        //减法
       public  class Sub:Calculation
        {
           public override double Cal()
           {
               double result = Numleft - NumRight;
               return result;
           }
        }
    }

     03.乘法类 Mul

      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 计算器_简单工厂_
    {
        //减法类
        public  class Mul:Calculation
        {
            public override double Cal()
            {
                double result = Numleft * NumRight;
                return result;
            }
        }
    }

      04.除法类 Div

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 计算器_简单工厂_
    {
        //除法类
       public class Div:Calculation
        {
           public override double Cal()
           {
               //除法中 除数是不能为0
               if (NumRight==0)
               {
                   throw new Exception("除数不能为0");
               }
               double result = Numleft / NumRight;
               return result;
           }
        }
    }

    3.最后就是准备 “简单工厂” 的类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 计算器_简单工厂_
    {
        //工作类
       public  class Factory
        {
           public static Calculation Cal(string ope) 
           {
               //初始化父类对象
               Calculation calculation = null;
               //根据传来的运算符实例化
               switch (ope)
               {
                   case"+":
                       calculation = new Add();
                       break;
                   case "-":
                       calculation = new Sub();
                       break;
                   case "*":
                       calculation = new Mul();
                       break;
                   case "/":
                       calculation = new Div();
                       break;
                  
               }
               //返回实例化的对象
               return calculation;
           }
        }
    }

    4.一切准备好后,我们来看看在窗体中是如何用的呐! 

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace 计算器_简单工厂_
    {
        public partial class FrmMain : Form
        {
            public FrmMain()
            {
                InitializeComponent();
            }
            private void btnCal_Click(object sender, EventArgs e)
            {
                //外层try作用:判断输入的操作数是否正确
                try
                {
                    //分别获得要计算的值
                    double num1 = Convert.ToDouble(txtLift.Text);
                    double num2 = Convert.ToDouble(txtRight.Text);
                    string ope = cmbstring.Text;
                    //把获得的运算符传达“简单工厂”
                    Calculation cal = Factory.Cal(ope);
                    double result = 0;
    
                    //赋值(最会忘记)
                    cal.Numleft = num1;
                    cal.NumRight = num2;
    
                    //内层try作用:判断当除法时除数是否为0
                    try
                    {
                        //知道需求,开始进行相应工作
                        result = cal.Cal();
                    }
                    catch (Exception ex)
                    {
                       
                        MessageBox.Show(ex.Message);
                    }
                   //显示结果
                    label1.Text = result.ToString();
                }
                catch (Exception ex)
                {
                    //如果输入不正确,则系统会提示“输入字符串的格式不正确”
                    MessageBox.Show(ex.Message);
                    
                }
               
               
              
            }
        }
    }

    我们来总结一下我们“简单工厂”类的一些注意点吧:

     1.方法是静态的,调用的时候不需要实例化

     2.方法的返回值是父类 类型

     3.方法是有参的

  • 相关阅读:
    kafka 幂等生产者及事务(kafka0.11之后版本新特性)
    git 忽略 .idea文件
    Java Scala 混合编程导致 编译失败 ,【找不到符号】问题解决
    Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable.
    Spark RDD持久化、广播变量和累加器
    PSQLException: FATAL: no pg_hba.conf entry for host "127.0.0.1", user "ambari", database "ambari", SSL off
    PostgreSQL:Java使用CopyManager实现客户端文件COPY导入
    ThreadLocal的使用及原理分析
    gradlew和gradle的区别
    Managing Large State in Apache Flink®: An Intro to Incremental Checkpointing
  • 原文地址:https://www.cnblogs.com/zhangzongle/p/5242898.html
Copyright © 2011-2022 走看看