タイトル: ショッピングモールのレジ担当者向けの小さなプログラムを作成します。考えられる状況には、通常料金、10% 割引、30% 割引、300 個以上の購入で 50% 割引などがあります。さまざまな割引は随時変更される可能性があります。時間。
インターフェイスは次のとおりです:
分析:
まず、お金を集めるための親クラス CashSuper を作成します。この親クラスは、他のさまざまな充電方法を含めるために使用されます: 通常充電、30% 割引、20% 割引、10% 割引、300 個以上の購入で 50% オフ、400 個以上の購入で 70% オフ、500 個以上の購入で 100% オフ、などの割引が提供されます。種類は異なりますが、種類は似ており、全額割引も同じです。したがって、通常料金、割引オファー、および全額割引オファーは、CashNormal、CashRebate、および CashRebate の 3 つの異なるカテゴリに分類できます。現金返却。
CashSuper の親クラスは継承用であるため、書き換えのために抽象クラスに設定します。次に、この親クラスに含まれる 3 つのサブクラスがすべて 1 つのパラメーターを呼び出します。これが実際に受け取る必要があるパラメーターです。 product であるため、パラメーターは共通パラメーター acceptMoney を渡すだけで済みます。
1 abstract class CashSuper2 {3 public abstract double acceptCash(double acceptMoney);4 }
次に、通常の課金があります: CashNormal
まず第一に、親クラスから取得するパラメータは、受け取る必要がある実際の商品の価格です。通常の課金では割引はありません。したがって、親クラスから渡された値を直接返します。
1 class CashNormal : CashSuper2 {3 public override double acceptCash(double acceptMoney)4 {5 return acceptMoney;6 }7 }
Discount: CashRebate
これは親クラス CashSuper から継承し、受け取る必要がある実際の商品の価格を取得します。実装する必要があるのは、製品に料金を請求することです。割引を実行するには、自分で割引パラメーターを定義する必要があります。そうすることで、他の人が彼に電話をかけたときに、割引パラメーターが渡され、ユーザーが割引を行うことで割引をユーザーにフィードバックできます。元値。
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 }
全額割引割引: CashReturn
これは、全額割引の水平線と割引額の 2 つのパラメーターがあることを除いて、割引オファーに似ています。したがって、このクラスには 2 つのパラメーターを定義するだけです。
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 }
ここでは、いくつかの割引を呼び出しますが、どの割引を呼び出すかを決定する必要があります。このために、ユーザーの選択を渡し、ユーザーが選択した割引方法を送信してから、どの割引を呼び出すかを決定します。優先メソッドは、シンプル ファクトリ モードを使用してすべての優先メソッドをカプセル化し、それらをさらに呼び出します。
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 }
最後に、ユーザーインターフェイスで上記の関数を呼び出すだけです。
以上がC# のシンプルなファクトリー パターンとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。