Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist das einfache C#-Factory-Muster?

Was ist das einfache C#-Factory-Muster?

零下一度
零下一度Original
2017-06-23 16:18:402269Durchsuche

Titel: Erstellen Sie ein kleines Programm für die Kasse im Einkaufszentrum. Mögliche Situationen sind: normale Gebühren, 10 % Rabatt, 30 % Rabatt, 50 % Rabatt für Einkäufe über 300 usw. Verschiedene Aktionen können jederzeit geändert werden.

Die Schnittstelle ist wie folgt:

Analyse:

Zuerst schreiben wir eine übergeordnete Klasse CashSuper zum Sammeln von Geld. Diese übergeordnete Klasse wird verwendet, um verschiedene andere Lademethoden einzubeziehen: normales Laden, 30 % Rabatt, 20 % Rabatt, 10 % Rabatt, 50 % Rabatt für Einkäufe über 300, 70 % Rabatt für Einkäufe über 400, 100 % Rabatt für Einkäufe über 500 usw., unter denen Rabatte gewährt werden. Obwohl sie unterschiedlich sind, sind die Arten ähnlich und die Rabatte mit vollem Rabatt sind gleich. Daher können wir normale Gebühren, Rabattangebote und volle Rabattangebote in drei verschiedene Kategorien einteilen: CashNormal, CashRebate und CashReturn.

Die übergeordnete Klasse CashSuper wird für die Vererbung verwendet, daher setzen wir sie zum Umschreiben auf „abstrakt“. Zweitens rufen die drei in dieser übergeordneten Klasse enthaltenen Unterklassen alle einen Parameter auf: das ist der tatsächliche Preis der Ware muss empfangen werden, daher müssen unsere Parameter nur den gemeinsamen Parameter übergeben: AcceptMoney.

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

Dann gibt es die normale Aufladung: CashNormal

Zunächst ist der Parameter, den er von der übergeordneten Klasse erhält, der Preis des tatsächlich benötigten Produkts Es werden keine normalen Gebühren erhoben. Geben Sie daher einfach den von der übergeordneten Klasse übergebenen Wert zurück.

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

Rabatt: CashRebate

Es ähnelt der normalen Aufladung und erbt von der übergeordneten Klasse CashSuper und ruft die Parameter von der übergeordneten Klasse ab den tatsächlichen Preis des Produkts, aber was er erreichen muss, ist ein Rabatt auf das Produkt, also muss er selbst einen Rabattparameter definieren, damit andere, wenn er ihn anruft, den Rabattparameter weitergeben und er geben kann Feedback zum Rabatt auf den Originalpreis an Benutzer.

 1     class CashRebate : CashSuper 2     { 3         //这就是cashrebate的属性了 4         private double monRebate = 1; 5  6         //调用CashRebate的时候需要从外面将优惠程度传进来 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     }

Voller Rabatt: CashReturn

Dies ähnelt dem Rabattangebot, außer dass es zwei Parameter hat: die horizontale Linie des vollen Rabatts und die Höhe des Rabatts. Definieren Sie daher einfach zwei Parameter für diese Klasse.

 1     class CashReturn : CashSuper 2     { 3         //这就是cashreturn的属性了 4         private double CashLevel = 0; 5         private double MoneyReturn = 0; 6  7         //对外调用函数所以必须是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     }

Jetzt haben wir mehrere Rabatte, aber wir müssen beurteilen, wann welcher Rabatt aufgerufen werden soll. In diesem Zusammenhang übergeben wir die Wahl des Benutzers und der Benutzer wählt den Rabatt danach Nach der Übertragung der Methode bestimmen wir dann, welche bevorzugte Methode aufgerufen werden soll. Dabei werden alle bevorzugten Methoden mithilfe des einfachen Factory-Modus gekapselt und weiter aufgerufen.

 1     class CashFactory 2     { 3         //CashSuper现在就类似double之类,返回值就是CashSuper 4         public static CashSuper createCashAccept(string type) 5         { 6             CashSuper cs = null; 7  8             switch (type) 9             {10                 case "正常收费":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 "八折优惠":26                     cs = new CashRebate("0.8");27                     break;28                 case "九折优惠":29                     cs = new CashRebate("0.9");30                     break;31                 case "七折优惠":32                     cs = new CashRebate("0.7");33                     break;34             }35             return cs;36         }37     }

Zum Schluss rufen Sie einfach die obige Funktion in der Benutzeroberfläche auf.

 1         private void ok_button_Click(object sender, EventArgs e) 2         { 3             /**对外这边需要了解两个函数 4              * 1.CashFactory.createCashAccept,这个是为了确定每一次的购物时调用的哪一种优惠方式 5              * 2.csuper.acceptCash,这个是为了获得每种优惠方式获得的优惠结果 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("单价:" + unitPrice_textBox.Text.ToString() + " 数量:" + amount.ToString() + "  " + typecomboBox.SelectedItem.ToString() + " 合计:" + totalPrices.ToString());12             resultLabel.Text = total.ToString();13         }

Das obige ist der detaillierte Inhalt vonWas ist das einfache C#-Factory-Muster?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn