戦略パターン:設計パターンの一つ

PHPz
リリース: 2023-08-28 17:54:01
オリジナル
1012 人が閲覧しました

戦略パターン:設計パターンの一つ

これまで、このシリーズでは 3 つのデザイン パターンを取り上げてきました。デザイン パターンの 4 つの異なるカテゴリを定義します。この記事では、行動デザインパターンに該当する戦略デザインパターンについて説明します。

このデザイン パターンをいつ使用する必要があるかという質問があるかもしれません。同じ操作を実行するためのメソッド (アルゴリズム) が複数あり、アプリケーションがパラメーターに基づいて特定のメソッドを選択するようにしたい場合です。このモードは戦略モードとも呼ばれます。

この記事の非常に簡単な例は並べ替え関数です。たとえば、配列を並べ替えるアルゴリズムは複数ありますが、配列要素の数に応じて、最高のパフォーマンスを得るにはどのアルゴリズムを使用するかを選択する必要があります。

このモードは戦略モードとも呼ばれます。
###質問######

複数の支払いゲートウェイを統合した電子商取引 Web サイトの例を示します。 Web サイトには複数の支払いゲートウェイがありますが、リクエストに応じて、それらすべてがフロントエンドに表示されるわけではありません。代わりに、カートの金額に基づいて、適切な支払いゲートウェイをその場で選択する必要があります。

簡単な例として、カートの金額が 500 ドル未満の場合、支払いは PayPal 標準を使用して処理される必要がありますが、金額が 500 ドル以上の場合は、保存されているクレジット カードの詳細を使用して処理される必要があります (詳細が保管してあります)。

正しい戦略が実装されていない場合、コードは次のようになります:

まず、Paypal による支払いとクレジット カードによる支払いの主要なクラスを提供します。これらは以下に追加されます。

リーリー

ここでは、コードを適切に動作させるために条件ステートメントを入れる必要があると言われるかもしれません。このロジックに新たな変更を加える必要がある場合、またはこのロジックにバグが見つかった場合、どれだけの変更を加える必要があるかを想像してみてください。このコードが使用されるすべての場所にパッチを追加する必要があります。

###解決######

同じ要件を実装しますが、Strategy パターンを使用します。これにより、コードがより明確になり、理解しやすく、拡張可能になります。

###インターフェース###

まず、さまざまな支払いゲートウェイ クラスすべてが使用するインターフェイスを実装します。最終的には、これらが私たちの戦略です。 リーリー

次に、これまで実装したものとは異なる戦略を使用できるメイン クラスを作成します。

リーリー

ここでは、支払いメソッドの条件付き読み込みが

payAmount

メソッドで行われていることがわかります。すべてをまとめて、さらに使用する方法を見てみましょう。

リーリー

支払いゲートウェイのロールオーバーがアプリケーションに対して透過的ではないことがわかります。パラメータに応じて、トランザクションを処理するために使用できる適切な支払いゲートウェイがあります。

新しい戦略を追加

後の段階で、ユーザーが異なるロジック (ここでは新しい支払いゲートウェイ) を使用して新しい戦略を追加する必要がある場合、この場合は非常に簡単です。新しい支払いゲートウェイである Moneybooker を追加し、カートの金額が 500 ドルを超えて 1,000 ドルを下回ったときに資金を処理したいとします。

必要なのは、インターフェイスを実装する新しい戦略クラスを作成することだけです。これで準備完了です。

リーリー

これで新しい戦略クラスの準備が整いました。変更する必要があるのはメインの payAmount

メソッドだけです。次のように変更する必要があります: リーリー

ここでは、メソッドを呼び出すクライアント コードではなく、

payAmount

メソッドのみに変更を加えていることがわかります。

###結論は######

結論として、同じタスクを実行する方法が複数ある場合 (ソフトウェア言語の場合、同じ操作を実行するアルゴリズムが複数ある場合)、Strategy パターンの実装を検討する必要があります。

このモードを使用すると、アルゴリズムの切り替えがアプリケーションに対して透過的ではないため、アルゴリズムを自由に追加/削除できます。

戦略設計パターンを説明するために、基本的だが役に立つ例を提供するために最善を尽くしましたが、追加のコメントや質問がある場合は、以下のフィードに遠慮なく追加してください。

以上が戦略パターン:設計パターンの一つの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!