Rarestyleへようこそ
C#,デザインパターン,UML,オブジェクト指向,Webサービス,iPAQ(モバイル) アクセス数: Number_0Number_0Number_7Number_5Number_1Number_2Number_2Number_4
インデント OCPとデザインパターン
インデント サンプルコードについて
インデント デザインパターン ひとくちメモ
インデント FactoryMethodパターン
インデント AbstractFactoryパターン
インデント Builderパターン
インデント Prototypeパターン
インデント Adapterパターン
インデント Bridgeパターン
インデント Compositeパターン
インデント Decoratorパターン
インデント Facadeパターン
インデント Flyweightパターン
インデント Proxyパターン
インデント TemplateMethodパターン
インデント Chain of Responsibilityパターン
インデント Commandパターン
インデント Iteratorパターン
インデント Mediatorパターン
インデント Mementoパターン
インデント Observerパターン
インデント Stateパターン
インデント Strategyパターン
インデント Visitorパターン
インデント 速習!デザインパターン第一回
インデント 速習!デザインパターン第二回
インデント 速習!デザインパターン第三回
インデント UMLとは
インデント UML入門
インデント オブジェクト指向
インデント クラス図
インデント アクティビティ図
インデント インタラクション図
インデント ユースケース図
インデント Rarestyle証明書サービス
インデント QRコード発行WSDL
インデント QRコード発行サンプル
インデント J2EE覚書
インデント FreeMind実践レポート
インデント モバイル情報
インデント Homeページ
インデント イベント&デジタルファッション
インデント ごあいさつ・免責情報
インデント お問い合わせ
デザインパターンでキャリアアップ

Strategyパターン (デザインパターン)

Strategyパターン 導入

Strategyパターンは、処理の戦略(アルゴリズム)をクラスとして取り出し、取り替え可能にするパターンです。

Strategyパターン ポイント

戦略は複数存在します。戦略はアルゴリズムをオブジェクトとして分離することが必要です。 また、複数の戦略を取り扱うための共通のインターフェースを設定すること、個々の振る舞いに対しては 多様性でもって実現します。

UML Strategyパターン

C#ソースコード Strategyパターン

Sample.cs

using System;

namespace Strategy
{
   //----------------------------------------------------------------
   //  デザインパターン Strategy
   //
   //
   //  アルゴリズムの集合を定義し、それぞれのアルゴリズムをカプセル化して
   //  それらを交換可能にする。Strategyパターンはアルゴリズムを、
   //  それを利用するクライアントから独立に変更できるようにする
   //
   //----------------------------------------------------------------


   //戦略の抽象定義
   public abstract class Strategy
   {
       //戦略メソッドの抽象定義
       public abstract void AlgorithmInterface();
   }


   //具象化クラス(プレゼント戦略)
   public class ConcreteStrategy_Presents :Strategy
   {
       //ここには実際に行う処理を記述します
       public override void AlgorithmInterface()
       {
           Console.WriteLine("バラの花を贈ります。");
       }
   }

   //具象化クラス(ソング戦略)
   public class ConcreteStrategy_Songs :Strategy
   {
       //ここには実際に行う処理を記述します
       public override void AlgorithmInterface()
       {
           Console.WriteLine("シャンソン愛の賛歌を歌います。");
       }
   }


   //具象化クラス(コンビニエンス戦略)
   public class ConcreteStrategy_Convenience :Strategy
   {
       //ここには実際に行う処理を記述します
       public override void AlgorithmInterface()
       {
           Console.WriteLine("女王様!!僕は何でも言うことをききます。");
       }
   }

   public class Context
   {
       private Strategy strategy;

       public Strategy SetStrategy
       {
           set{this.strategy=value;}
       }

       public void ContextInterface()
       {
           //具象化されるメソッドがオーバーライドされるって仕組みだね
           strategy.AlgorithmInterface();
       }
   }

   /// <summary>
   /// Class1 の概要の説明です。
   /// </summary>
   class Class1
   {
       /// <summary>
       /// アプリケーションのメイン エントリ ポイントです。
       /// </summary>
       [STAThread]
       static void Main(string[] args)
       {

           //ポイント&解説、戦略を切り替えて、利用したい状況を考える

           //道端で女の子に声をかけるシュミレーションを例に取りましょう
           //実行するのはContextインスタンスです。
           //Contextインスタンスはいろんな振る舞いを装うことが予想されますが、
           //Contextインスタンスが実行できるContextInterface()メソッドただ一つです。

           //お嬢様タイプを見つけた場合(プレゼント戦略が可能)

           Context Ctx =new Context();
           Ctx.SetStrategy =new ConcreteStrategy_Presents();

           //実行
           Ctx.ContextInterface();

           //戦略リセット
           Ctx.SetStrategy=null;

           //のりのりタイプを見つけた場合(カラオケ戦略が可能)
           Ctx.SetStrategy =new ConcreteStrategy_Songs();
           //実行
           Ctx.ContextInterface();

           //戦略リセット
           Ctx.SetStrategy=null;

           //女王様タイプを見つけた場合(下僕戦略として)

           Ctx =new Context();
           Ctx.SetStrategy =new ConcreteStrategy_Convenience();
           //実行
           Ctx.ContextInterface();

           //-------------------------------------------------------
           //  あとがき
           //  Ctxは一人で幾つもの演出を切り替えて実行することが出来ました。
           //  このように、具象化するアルゴリズムをカプセル化して
           // クライアントはクライアントから独立に変更できるようにできます。
           //-------------------------------------------------------
       }
   }
}

Strategy 実行結果

UMLプラグインによる描画 Strategyパターン

Javaソースコード Strategyパターン

Context.java
1: package strategy;
 2: 3: public class Context {
 4: 5:     private Strategy strategy;
 6: 7:     public Strategy getStrategy() {
 8:         return strategy;
 9:     }
10: 11:     public void setStrategy(Strategy strategy) {
 12:         this.strategy = strategy;
 13:     }
14: 15:     public void ContextInterface() {
 16:         this.getStrategy().algorithmInterface();
 17:     }
18: 19: }
Strategy.java
1: package strategy;
 2: 3: public abstract class Strategy {
 4: 5:     public abstract void algorithmInterface();
 6: 7: }
ConcreteStrategy_Presents.java
1: package strategy;
 2: 3: public class ConcreteStrategy_Presents extends Strategy {
 4: 5:     public void algorithmInterface() {
 6:         System.out.println("バラの花を贈ります。");
 7:     }
8: }
ConcreteStrategy_Songs.java
1: package strategy;
 2: 3: public class ConcreteStrategy_Songs extends Strategy {
 4: 5:     public void algorithmInterface() {
 6:         System.out.println("シャンソン愛の賛歌を歌います。");
 7:     }
8: }
ConcreteStrategy_Convenience.java
1: package strategy;
 2: 3: public class ConcreteStrategy_Convenience extends Strategy {
 4: 5:     public void algorithmInterface() {
 6:         System.out.println("女王様!!僕は何でも言うこと聞きます。");
 7:     }
8: 9: }
StartClass.java
1: package strategy;
 2: 3: public class StartClass {
 4: 5:     public static void main(String[] args) {
 6:         //戦略です。
 7:         Context ctx =new Context();
 8:         //Strategy:Presents戦略
 9:         ctx.setStrategy(new ConcreteStrategy_Presents());
 10:         ctx.ContextInterface();
11:         ctx.setStrategy(null);
 12:         //Strategy:Songs戦略
 13:         ctx.setStrategy(new ConcreteStrategy_Songs());
 14:         ctx.ContextInterface();
15:         ctx.setStrategy(null);
 16:         //Strategy:Convenience戦略
 17:         ctx.setStrategy(new ConcreteStrategy_Convenience());
 18:         ctx.ContextInterface();
19:         ctx.setStrategy(null);
 20:     }
21: }



コミュニティマーカーデザインパターン「ひとくちメモ」へ

コミュニティマーカーHomeへもどる

お天気情報
東京都 東京 - 今日の天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
東京都 東京 - 明日の天気
晴時々曇 - リンク先
最高 最低
気温 - -
湿度 - -
取得日:2010/09/03 17:00:00  ST: True
東京都 東京 - あさっての天気
曇時々晴 - リンク先
最高 最低
気温 34 27
湿度 93.2 80.6
取得日:2010/09/03 17:00:00  ST: True
大阪府 大阪 - 今日の天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
大阪府 大阪 - 明日の天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
大阪府 大阪 - あさっての天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
livedoorのWebサービスより提供
【工事中】お天気配信 ユーザー登録
Copyright 2006 Rarestyle このページへのリンクは確認不要です。
Programming by Xenon Project Team     postmaster@rarestyle.net
免責事項について
レアスタイルサイト内検索