程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 兩種設計模式(1)==>>“簡單工廠”,兩種設計模式工廠

兩種設計模式(1)==>>“簡單工廠”,兩種設計模式工廠

編輯:C#入門知識

兩種設計模式(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.方法是有參的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved