ファイルとして再作成されるべきです。これにはいくつかの利点があります。詳しくはWikipedia:SVGへの乗り換えを参照してください。形式がすでに利用可能である場合は、アップロードしてください。アップロード後、この画像にあるこのテンプレートを{{SVG版利用可能|新しい画像ファイル名.svg}}テンプレートと置き換えてください。パターンは、コンピュータープログラミングの領域において、アルゴリズムを実行時に選択することができるデザインパターンである。Strategyパターンはアルゴリズムを記述するサブルーチンへの参照をデータ構造の内部に保持する。このパターンの実現には、関数ポインタや関数オブジェクト、デリゲートのほか、オーソドックスなオブジェクト指向言語におけるポリモーフィズムと委譲、あるいはリフレクションによる動的ダック・タイピングなどが利用される。このパターンは、関数が第一級オブジェクトである言語では暗黙のうちに使用されている。例として後述のPythonコード例を参照のこと。パターンは、アプリケーションで使用されるアルゴリズムを動的に切り替える必要がある際に有用である。パターンはアルゴリズムのセットを定義する方法を提供し、これらを交換可能にすることを目的としている。パターンにより、アルゴリズムを使用者から独立したまま様々に変化させることができるようになる。パターンサンプルコード[編集]Java[編集]Javaではクラスのメソッドオーバーライドによるポリモーフィズムを使ってStrategyパターンを実現することができる。インターフェイスを用いた例を示す。異なるアルゴリズムに従う3つのコンテキスト。具体的な戦略を実装するクラスは、このインターフェイスを実装する。コンテキストクラスは、具体的な戦略を呼び出すためにこのインターフェイスを使用する。インターフェイスを用いたアルゴリズムの実装。オブジェクトへの参照を保持する。関数が第一級オブジェクトであり、このパターンを明示的に定義する必要はない。プログラミングで見られる例である。9"C#[編集]C#はJava同様にクラスやインターフェイスによるポリモーフィズムを用いることもできるが、カスタマイズポイントがひとつのメソッドしかない場合(オブジェクトの他のプロパティやメソッドにアクセスしない場合)は、継承関係を必要としないデリゲートを使うほうが好まれる[1]。テストアプリケーション。異なるアルゴリズムに従う3つのコンテキスト。具体的な戦略を実装するクラスは、このデリゲートに適合するメソッドを実装する。コンテキストクラスは、具体的な戦略を呼び出すためにこのデリゲートを使用する。オブジェクトへの参照を保持する。用いることで、C#と類似の実装が可能となる。パターンのものと同じである。これら二つのデザインパターンはその意図が同じではない。パターンは構造に対するパターンである。パターンにおける抽象化と実装の結合より強固である。パターンに従うと、クラスの振る舞いは継承されるべきではなく、インターフェイスを用いてカプセル化するべきである。振る舞いにはブレーキとアクセルがある。アクセルとブレーキの振る舞いはモデルにより大きく異なるため、良くあるアプローチはこれらの振る舞いをサブクラスとして実装することであるが、このアプローチには大きな問題点がある。モデルごとに宣言されなければならない。これはモデルが少ないときには問題にならないが、モデルの数が増えるにつれ、それらの振る舞いを管理する作業が大幅に増加し、またコードがモデル間で重複することになる。各コードを詳しく分析しなければそれぞれのモデル用の振る舞いの性質を知ることができない。パターンにおける振る舞いは別々のインターフェイスと、これらのインターフェイスを実装した抽象クラスとして定義される。具体的なクラスは、これらのインターフェイスをカプセル化する。これにより、振る舞いと、それを用いるクラスがうまく分離できる。振る舞いは、それを用いるクラスに変更を加えずに変更することができ、クラスは大きなコード変更を必要とすることなく、使用する実装を切り替えることで振る舞いを切り替えることができる。振る舞いは設計時にも実行時にも変更することができる。とも調和を保つことができる。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。Cookieに関する声明モバイルビュ。