【設計モード】一、戦略モード


一、概説
ポリシー・モード:一連のアルゴリズムを定義し、各アルゴリズムをカプセル化し、互いに置き換えることができます.このモードでは、アルゴリズムを使用するお客様とは独立して変更できます.政策モデル(Policy)とも呼ばれる.(Definea family of algorithms,encapsulate each one, andmake them interchangeable. Strategy lets the algorithmvary independently from clients that use it. )
△戦略モードはオブジェクト自体と演算規則を区別し、その機能は非常に強い.この設計モード自体の核心思想はオブジェクト向けプログラミングの多形性の思想であるからだ. は、オブジェクト向けの および 機構を使用する.    は以下の1.複数のクラスは、アルゴリズムや動作で少し異なるシーンしかありません.2.アルゴリズムが自由に切り替えるシーン.3.アルゴリズム規則をマスクする必要があるシーン. を使用するには、もちろん注意すべき点もあります.それは、ポリシークラスがあまり多くないことです.1つのポリシー家族の具体的なポリシーの数が4つを超える場合は、 を考慮して、ポリシークラスの膨張と対外暴露の問題を解決する必要があります.実際のプロジェクトでは、一般的に によってポリシークラスの宣言を実現します.
二、OCでの実現
次の内容はwnvvのブログに由来します.
スーパーへ買い物に行くには、現金払い、銀行カード払い、クレジットカード払いなど、支払い方法がたくさんあります.
1、親の作成
@interface Strategy : NSObject

- (void)pay;

@end

2、現金支払いクラスを作成し、strategyを継承し、pay方法を書き換える
@interface payCash : Strategy

@end

@implementation payCash

- (void)pay

{

    NSLog(@"      ");

}

@end

3、銀行カードの支払いクラスを作成し、同じ
@interface payCard : Strategy

@end

@implementation payCard

- (void)pay

{

    NSLog(@"       ");

}

@end

4.組織クラスを作成し、各メソッドクラスを一緒に組織する
@implementation Context

+ (void)contextToUse:(id)strategy

{

    Strategy *st = strategy;

    [st pay];

}

@end

5、使用、具体的な使用方法をcontextに転送する
[Context contextToUse: [[payCash alloc]init]]; 

6、まとめ:ポリシーモードは機能が同じまたは類似の具体的なポリシーを機能の大きいクラスから分離し、組織し、結合性を低下させ、各具体的なクラスの修正は他のクラスに影響を与えない. 
参考記事:
一、hguisu設計モード(18)戦略モードStrategy(対象行動型)