C# のシンプルなファクトリー パターンとは何ですか?

零下一度
リリース: 2017-06-23 16:18:40
オリジナル
2321 人が閲覧しました

タイトル: ショッピングモールのレジ担当者向けの小さなプログラムを作成します。考えられる状況には、通常料金、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート