録音西デザインスタディ。西のデザインパターンのPDFシェア:https://pan.baidu.com/s/11h9x-4RffXydf3GFH5_y7g 抽出コード:x5c3。
前はスーパーマーケットのレジ優先例で学んだ簡単な植物のアルゴリズムパッケージと生産例が。これは、上で作業を続けると、それは戦略モードになるようにする簡単な植物です。
各アルゴリズムは、彼らは一般的な戦略は法案の量を返すことです抽象化、具体的な優遇政策です。アルゴリズムのクラスを使用してクラスとアルゴリズムとの間の結合を単純化CashContextインスタンスによって作成され、コール戦略。ここでは、クライアントは、戦略の異なる種類の特定の使用を知っている、とさえ量はいくつかの戦略の混合により算出したかどうかをチェックしてください(例:受信、CashRebateとCashReturnの使用に関する「完全な900 100 20%に」)。
使用してシステムを。 名前空間ConsoleApp4 { クラスプログラム { パブリック 静的な 無効メイン(文字列[] argsが) { VAR cashContextは= 新しい CashContext(" 8の折" ); VaRの結果はcashContext.GetResult(= 900 )。 } } パブリック クラスCashContext { CashSuper cashSuper。 公共 CashContext(文字列型) { スイッチ(タイプ) { 場合 " 满300减50 ":cashSuper = 新しい CashReturn(300D、50D)。休憩; ケース " 8折":cashSuper = 新しい CashRebate(0.8D)。休憩; デフォルト:cashSuper = 新しい CashNormal(); 休憩; } } 公共の 二重のgetResult(二重お金) { リターンcashSuper.AcceptCash(お金)。 } } パブリック 抽象 クラスCashSuper { パブリック 抽象 ダブル AcceptCash(ダブル金)。 } パブリック クラスCashNormal:CashSuper { 公共 オーバーライド ダブル AcceptCash(二重お金) { 戻りお金。 } } パブリック クラスCashRebate:CashSuper { プライベート ダブルリベート。 公共 CashRebate(ダブルリベート) { この .rebate =リベート; } 公共 オーバーライド ダブル AcceptCash(ダブル金) { リターンお金* リベート。 } } パブリック クラスCashReturn:CashSuper { プライベート ダブルmoneyCondition。 プライベート ダブルmoneyReturn。 公共 CashReturn(二重状態、ダブル@return) { moneyCondition = 条件; moneyReturn = @return。 } 公共 オーバーライド ダブル AcceptCash(ダブル金) { 場合(お金> = moneyCondition) { リターンのお金- ((お金/ moneyCondition)* moneyReturn)。 } 他 { リターンのお金。 } } } }