Android開発における戦略設計モデルの応用
2808 ワード
1.パターン定義
一連のアルゴリズムを定義し、各アルゴリズムをカプセル化し、互いに置き換えることができるようにします.ポリシー設計モードにより、アルゴリズムは、使用するお客様とは独立して独立して変化することができます.
2.ポリシーの例
もし私たちが財テク製品を作るならば、支付宝と微信の2つの支払いルートがあって、2つのルートの金額のアルゴリズムは異なっていて、この時もう1つの工行の支払いルートあるいは後で更に多くのルートがあって、各ルートの金額のアルゴリズムが異なっている時、この時策略の設計モードを使って各ルートの金額のアルゴリズムをカプセル化して、筋道がはっきりしています.万一、あるチャネルのアルゴリズムが変更された場合、そのチャネルのアルゴリズムを直接修正することもできます.
仮に私达が1元の価格の100商品があると仮定して、各ルートはすべて优遇があって、しかし优遇力道は异なって、支付宝は优遇します:元の価格-(元の価格/10)、微信の优遇は://元の価格-(元の価格/20)、工行の优遇は:元の価格-0.1で、それでは策略の设计のモードの书き方は以下の通りです.
価格ポリシーインタフェースIPriceを定義する.java
それぞれ3種類の支払い方式は価格の策略のインタフェースを実現して、具体的な策略の実現、金額のアルゴリズムをその中に書きます
コンテキストロールを確立し、ポリシーのコンテキスト環境を操作し、上位モジュールのポリシー、アルゴリズムへの直接アクセスを遮断する役割を果たします.
3.テスト実装
開発クライアントでは
一連のアルゴリズムを定義し、各アルゴリズムをカプセル化し、互いに置き換えることができるようにします.ポリシー設計モードにより、アルゴリズムは、使用するお客様とは独立して独立して変化することができます.
2.ポリシーの例
もし私たちが財テク製品を作るならば、支付宝と微信の2つの支払いルートがあって、2つのルートの金額のアルゴリズムは異なっていて、この時もう1つの工行の支払いルートあるいは後で更に多くのルートがあって、各ルートの金額のアルゴリズムが異なっている時、この時策略の設計モードを使って各ルートの金額のアルゴリズムをカプセル化して、筋道がはっきりしています.万一、あるチャネルのアルゴリズムが変更された場合、そのチャネルのアルゴリズムを直接修正することもできます.
仮に私达が1元の価格の100商品があると仮定して、各ルートはすべて优遇があって、しかし优遇力道は异なって、支付宝は优遇します:元の価格-(元の価格/10)、微信の优遇は://元の価格-(元の価格/20)、工行の优遇は:元の価格-0.1で、それでは策略の设计のモードの书き方は以下の通りです.
価格ポリシーインタフェースIPriceを定義する.java
public interface IPrice {
double price(double originPrice);
}
それぞれ3種類の支払い方式は価格の策略のインタフェースを実現して、具体的な策略の実現、金額のアルゴリズムをその中に書きます
public class AliPayPrice implements IPrice {
@Override
public double price(double originPrice) {
// -( /10)
BigDecimal discountPrice = new BigDecimal(originPrice).divide(new BigDecimal(10), 2, BigDecimal.ROUND_HALF_UP);
return new BigDecimal(originPrice).subtract(discountPrice).doubleValue();
}
}
public class WechatPayPrice implements IPrice {
@Override
public double price(double originPrice) {
// -( /20)
BigDecimal discountPrice = new BigDecimal(originPrice).divide(new BigDecimal(20), 2, BigDecimal.ROUND_HALF_UP);
return new BigDecimal(originPrice).subtract(discountPrice).doubleValue();
}
}
public class GonghangPayPrice implements IPrice {
@Override
public double price(double originPrice) {
// - 0.1
return originPrice - 0.1d;
}
}
コンテキストロールを確立し、ポリシーのコンテキスト環境を操作し、上位モジュールのポリシー、アルゴリズムへの直接アクセスを遮断する役割を果たします.
public class PriceContext {
private IPrice iPrice;
public PriceContext(IPrice iPrice) {
this.iPrice = iPrice;
}
public double price(double originPrice) {
return this.iPrice.price(originPrice);
}
}
3.テスト実装
開発クライアントでは
public class AppClient {
public static void main(String[] args){
double originPrice = 100d;
AliPayPrice aliPayPrice = new AliPayPrice();
PriceContext priceContext = new PriceContext(aliPayPrice);
System.out.println("price = "+ priceContext.price(originPrice)); // :price = 90.00
WechatPayPrice wechatPayPrice = new WechatPayPrice();
priceContext = new PriceContext(wechatPayPrice);
System.out.println("price = "+ priceContext.price(originPrice)); // :price = 95.00
GonghangPayPrice gonghangPayPrice = new GonghangPayPrice();
priceContext = new PriceContext(gonghangPayPrice);
System.out.println("price = "+ priceContext.price(originPrice)); // :price = 99.90
}
}