横たわるデザインパターン------戦略モード

戦略モード(戦略):それは、彼らがお互いを置き換えることができるように、それらをカプセル化し、アルゴリズムのファミリーを定義し、このモードでは、アルゴリズムの変更は、アルゴリズムを使用している顧客には影響しませんことができます。

 

 

 

パブリック抽象クラスCashSuper { 
パブリック抽象ダブルacceptCash(ダブル金)。
}
/ ** 
*正常收费子类
* /
publicクラスのCashNormalはCashSuper {拡張
@Override
公共ダブルacceptCash(ダブルお金は){
お金を返します。
}
}
/ ** 
*打折收费子类
* /
publicクラスCashRebateはCashSuper {拡張し

、プライベートダブルmoneyRebateを

公共CashRebate(ダブルmoneyRebate){
this.moneyRebate = moneyRebate。
}
@Override
公共ダブルacceptCash(二重お金){
お金を返す* moneyRebate。
}
}
/ ** 
*返现收费子类
* /
publicクラスCashReturnはCashSuper {拡張
プライベートダブルmoneyConditionを。
プライベートダブルmoneyReturn。

公共CashReturn(ダブルmoneyCondition、ダブルmoneyReturn){
this.moneyCondition = moneyCondition。
this.moneyReturn = moneyReturn。
}

@Override
公共ダブルacceptCash(二重お金){
(お金> = moneyCondition)であれば{
お金を返す- Math.floor(お金/ moneyCondition)* moneyReturn。
}
0を返します。
}
}

輸入lombok.Data。

@data
パブリッククラスCashContext {

CashSuper cashSuper。

公共CashContext(文字列型){
スイッチ(タイプ){
場合、 "正常收费":
cashSuper =新しいCashNormal()。
ブレーク;
場合"满300返100":
cashSuper =新しいCashReturn(300100)。
ブレーク;
ケース"打8折":
cashSuper =新しいCashRebate(0.8);
ブレーク;
}
}

公共の二重のgetResult(二重お金){
cashSuper.acceptCash(お金)を返します。
}
}

パブリッククラスTestCash { 
@Test
公共ボイドTEST2(){
CashContext cashContext =新しいCashContext( "打8折")。
ダブル現金= cashContext.getResult(3000);
System.out.println(現金);
}
}

Strategyパターンの分析:

  戦略モードでは、これらのアルゴリズムのすべてが作業を完了するために同一であり、ビューの概念的な観点から、一連のアルゴリズムを定義する方法であるが、異なる達成するために、それはクラスや様々なアルゴリズムを減らし、同じようにすべてのアルゴリズムを呼び出すことができますクラス間の結合を利用して。

  利点:

   各クラスは、それ自身のアルゴリズムを有し、そのインタフェースによって個々に試験することができるので、1試験装置は、簡略化されています。

   2.戦略パターンは、アルゴリズムをカプセル化するために使用されるが、実際には、それは、パッケージング規則のほぼすべてのタイプすることができ、彼らがビジネスルールの適用の異なる時間に異なるニーズを聞くたび、あなたはこれに対処するために、分析プロセスにおける戦略パターンを使用することを検討することができます可能性が変わります。

上記のコードは、最善の方法は、選択反射条件で実施することで、完璧ではありません。

おすすめ

転載: www.cnblogs.com/zsmcwp/p/11615653.html