您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(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)。
界面如下:
分析:
首先我們對(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)把它分享出去讓更多的人看到。
免責(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)容。