溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#簡(jiǎn)單工廠模式指的是什么

發(fā)布時(shí)間:2021-03-06 13:55:24 來源:億速云 閱讀:119 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)C#簡(jiǎn)單工廠模式指的是什么,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

題目:做一個(gè)商場(chǎng)收銀的小程序,可能會(huì)出現(xiàn)的情況包括:正常收費(fèi),九折優(yōu)惠,七折優(yōu)惠,滿300減50等各種不同隨時(shí)會(huì)變化的優(yōu)惠活動(dòng)。

界面如下:

C#簡(jiǎn)單工廠模式指的是什么

分析:

首先我們對(duì)于收錢寫一個(gè)父類CashSuper。這個(gè)父類是用來包含其他的各種收費(fèi)方式的:正常收費(fèi)、七折優(yōu)惠、八折優(yōu)惠、九折優(yōu)惠、滿300減50、滿400減70、滿500減100等情況,其中折扣優(yōu)惠雖然不同,但是類型相似,滿減優(yōu)惠同理,故此我們可以將正常收費(fèi)、折扣優(yōu)惠與滿減優(yōu)惠分別劃分為三個(gè)不同的類:CashNormal、CashRebate、CashReturn。

而CashSuper這個(gè)父類是用于繼承的,所以我們?cè)O(shè)置為abstract用來被重寫的,其次這個(gè)父類所包含的的三個(gè)子類都會(huì)共同調(diào)用到一個(gè)參數(shù):那就是實(shí)際需要收到的商品的價(jià)格,所以我們的參數(shù)只需要傳進(jìn)來共同的參數(shù):acceptMoney即可。

1 abstract class CashSuper2     {3         public abstract double acceptCash(double acceptMoney);4     }

然后就是正常收費(fèi):CashNormal

首先他從父類獲得參數(shù)是實(shí)際需要收到的商品的價(jià)格,他本身事正常收費(fèi)沒有任何的優(yōu)惠,所以直接返回從父類傳進(jìn)來的值即可。

1     class CashNormal : CashSuper2     {3         public override double acceptCash(double acceptMoney)4         {5             return acceptMoney;6         }7     }

折扣優(yōu)惠:CashRebate

他和正常收費(fèi)類似,繼承于父類CashSuper,會(huì)獲得來自于父類的參數(shù),得到實(shí)際需要收到的商品的價(jià)格,但是他需要實(shí)現(xiàn)的是對(duì)商品進(jìn)行打折優(yōu)惠,所以他需要自己定義一個(gè)折扣優(yōu)惠參數(shù),這樣別人調(diào)用他的時(shí)候?qū)⒄劭蹍?shù)傳進(jìn)來,他就可以通過對(duì)原價(jià)進(jìn)行折扣優(yōu)惠反饋給用戶了。

 1     class CashRebate : CashSuper 2     { 3         //這就是cashrebate的屬性了 4         private double monRebate = 1; 5  6         //調(diào)用CashRebate的時(shí)候需要從外面將優(yōu)惠程度傳進(jìn)來 7         public CashRebate(string moneyRebate) 8         { 9             this.monRebate = double.Parse(moneyRebate);10         }11 12         public override double acceptCash(double acceptMoney)13         {14             return acceptMoney * monRebate;15         }16     }

滿減優(yōu)惠:CashReturn

這個(gè)與折扣優(yōu)惠類似了,只是他有兩個(gè)參數(shù)而已:滿減的水平線,和減扣多少。故此給此類定義兩個(gè)參數(shù)即可。

 1     class CashReturn : CashSuper 2     { 3         //這就是cashreturn的屬性了 4         private double CashLevel = 0; 5         private double MoneyReturn = 0; 6  7         //對(duì)外調(diào)用函數(shù)所以必須是public 8         public CashReturn(string level,string MonReturn) 9         {10             this.CashLevel = double.Parse(level);11             this.MoneyReturn = double.Parse(MonReturn);12         }13 14         public override double acceptCash(double acceptMoney)15         {16             double result = acceptMoney;17             if (acceptMoney >= CashLevel)18             {19                 result = acceptMoney - Math.Floor(acceptMoney / CashLevel) * MoneyReturn;20             }21             return result;22         }23     }

現(xiàn)在獲得了幾種優(yōu)惠情況了,但是我們需要判斷什么時(shí)候需要調(diào)用哪種優(yōu)惠情況,這點(diǎn)我們通過用戶的選擇,用戶將選擇的優(yōu)惠方式傳輸過來,我們?cè)俅_定調(diào)用哪一種優(yōu)惠方式,這就是利用簡(jiǎn)單工廠模式,將所有的優(yōu)惠方式封裝好,在進(jìn)一步調(diào)用。

 1     class CashFactory 2     { 3         //CashSuper現(xiàn)在就類似double之類,返回值就是CashSuper 4         public static CashSuper createCashAccept(string type) 5         { 6             CashSuper cs = null; 7  8             switch (type) 9             {10                 case "正常收費(fèi)":11                     cs = new CashNormal();12                     break;13                 case "滿300減50":14                     cs = new CashReturn("300", "50");15                     break;16                 case "滿500減100":17                     cs = new CashReturn("500", "100");18                     break;19                 case "滿400減70":20                     cs = new CashReturn("400", "70");21                     break;22                 case "滿900減200":23                     cs = new CashReturn("900", "200");24                     break;25                 case "八折優(yōu)惠":26                     cs = new CashRebate("0.8");27                     break;28                 case "九折優(yōu)惠":29                     cs = new CashRebate("0.9");30                     break;31                 case "七折優(yōu)惠":32                     cs = new CashRebate("0.7");33                     break;34             }35             return cs;36         }37     }

最后在用戶接口調(diào)用上面的函數(shù)即可。

 1         private void ok_button_Click(object sender, EventArgs e) 2         { 3             /**對(duì)外這邊需要了解兩個(gè)函數(shù) 4              * 1.CashFactory.createCashAccept,這個(gè)是為了確定每一次的購物時(shí)調(diào)用的哪一種優(yōu)惠方式 5              * 2.csuper.acceptCash,這個(gè)是為了獲得每種優(yōu)惠方式獲得的優(yōu)惠結(jié)果 6              */ 7             CashSuper csuper = CashFactory.createCashAccept(typecomboBox.SelectedItem.ToString()); 8              9             totalPrices = csuper.acceptCash(double.Parse(unitPrice_textBox.Text) * double.Parse(amount_textBox.Text));10             total += totalPrices;11             listBox1.Items.Add("單價(jià):" + unitPrice_textBox.Text.ToString() + " 數(shù)量:" + amount.ToString() + "  " + typecomboBox.SelectedItem.ToString() + " 合計(jì):" + totalPrices.ToString());12             resultLabel.Text = total.ToString();13         }

關(guān)于“C#簡(jiǎn)單工廠模式指的是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI