コードを使用して Java の戦略パターンを実装する方法
戦略パターン
戦略パターンは、Java の 23 の動作パターンの 1 つです。まず、戦略パターンが何であるかを見てみましょう。
1. 戦略パターンとは
戦略パターンの定義:
この設計パターンは、一連のアルゴリズムをカプセル化して、アルゴリズムの変更はクライアントの使用には影響しません。戦略パターンはオブジェクトの動作パターンに属し、アルゴリズムをカプセル化し、アルゴリズムの使用責任をアルゴリズムの実装から分離し、これらのアルゴリズムの管理を別のオブジェクトに委任します。
実際、実生活では、特定の目標を達成するために複数の戦略から選択できる状況によく遭遇します。たとえば、旅行するときは、飛行機に乗ったり、電車に乗ったり、自転車に乗ったり、または自分の専用車を運転することもできます。 または、たとえば、オンライン ショッピングの場合、中国工商銀行、中国農業銀行、中国建設銀行などを選択できますが、提供されるアルゴリズムはすべて同じであり、支払いを支援します。
ソフトウェア開発でも同様の状況に遭遇することがありますが、ある機能を実装するために複数のアルゴリズムや戦略がある場合、さまざまな環境や条件に応じて、異なるアルゴリズムや戦略を選択して機能を完成させることができます。関数。
2. ストラテジー モードの長所と短所
利点:
- ##複数の条件ステートメントは保守が困難ですが、ストラテジーを使用します。モードでは、複数の条件ステートメントの使用を回避できます。継承を通じて、アルゴリズム ファミリのパブリック コードを親クラスに配置して、コードの再利用を回避し、一連の再利用可能なアルゴリズムを提供できます
- 同じ動作をさまざまな実装で実現します。お客様は、時間やスペースの要件に応じて異なるものを選択できます。
- オープニングとクロージングを完璧にサポートします。原則として、元のコードを変更せずに新しいアルゴリズムを柔軟に追加し、アルゴリズム
- の使用を環境クラスに配置し、アルゴリズムの実装を特定の戦略クラスに移動することで、次のことを実現できます。演算子の分離
- 欠点:
クライアントは、すべての戦略アルゴリズムの違いを順番に理解する必要があります。適切なタイミングで適切なものを選択するため アルゴリズム クラス
- 戦略モデルは多くの戦略クラスを作成するため、メンテナンスの難易度が高くなります
- 3 . 戦略モデルの構造
構造図:
4. コードの実装
これで 3 羽のアヒルができました:
緑のアヒル、赤いアヒル、小さなアヒル (小さなアヒルはまだ飛べません)ここでアヒルの親クラスを定義します:
吠え声と外観のメソッドがあります。それぞれ異なるため、サブクラスで書き直す必要があります)飛行することもできます (ここでは戦略モードが使用されます)
public abstract class duck { //鸭子都会叫: public void quack(){ System.out.println("嘎嘎嘎"); } //鸭子的外观,因为都不一样,所以由子类去实现 public abstract void display(); //以下使用策略模式: //在父类中持有该接口,并由该接口代替飞行行为(组合) private Flying flying; //提供set方法 public void setFlying(Flying flying) { this.flying = flying; } public void fly(){ flying.Fly(); } }
/** * 策略接口:实现了鸭子的飞行行为 */ public interface Flying { void Fly(); }
package## にカプセル化します。 # #Cannot Fly の 2 つのメソッド: Can fly (上記のフライト インターフェイスに継承され、フライト メソッドをオーバーライド):
public class FlyWithWin implements Flying { @Override public void Fly() { System.out.println("我会飞"); } }
Can 't fly:
public class FlyNoWay implements Flying { @Override public void Fly() { System.out.println("我不会飞行"); } }
注: 上記の 2 つのメソッドをアルゴリズム ファミリとして個別にカプセル化し、プログラムがいずれかのアルゴリズムを使用する必要がある場合、プログラムはアルゴリズムの最終的な効果は同じであるため、アルゴリズムの変更の影響を受けません。
赤い羽根のアヒル:
/** * 红色鸭子 */ public class RedDuck extends duck{ public RedDuck(){ super(); //给鸭子注入飞行的能力,这里就是通过算法族里面的会飞的算法 super.setFlying(new FlyWithWin()); } @Override public void display() { System.out.println("我是红色的鸭子"); } }
緑の羽根のアヒル:
/** * * 绿色鸭子 */ public class GreenDuck extends duck{ public GreenDuck(){ super(); //给鸭子注入飞行的能力,这里也是通过算法族里面的会飞的算法 super.setFlying(new FlyWithWin()); } @Override public void display() { System.out.println("我是绿色的鸭子"); } }
小さなアヒルの種類 (飛べない):
/** * 小鸭子,还不会飞 */ public class SamllDuck extends duck{ public SamllDuck(){ super(); //小鸭子不会飞,所以使用了算法族里面不会飞的算法 super.setFlying(new FlyNoWay()); } @Override public void display() { System.out.println("我还是小鸭子"); } //因为小鸭子和大鸭子的叫声不一样,所以重写叫声方法 public void quack(){ System.out.println("嘎~嘎~嘎"); } }
テストの種類:
public class Test { public static void main(String[] args) { System.out.println("***测试鸭子程序***"); duck d = null; //这下面是轮流运行!!!! d = new RedDuck(); //测试红色的鸭子 d = new GreenDuck(); //测试绿色的鸭子 d = new SamllDuck(); //测试小鸭子 d.display(); d.quack(); d.fly(); System.out.println("***测试完毕***"); } }
##***アヒル プログラムのテスト***
私は赤いアヒルですクワック私は飛べます ***テスト完了***
マガモをオブジェクトとして使用する場合:***测试鸭子程序*** 我是绿色的鸭子 嘎嘎嘎 我会飞 ***测试完毕***ログイン後にコピー
コガモをオブジェクトとして使用する場合 オブジェクトの場合:***テストアヒルプログラム***
私はまだ小さなアヒルですqua~qua~qua私は飛べません* **テスト完了***
3. システム内のアルゴリズムが互いに完全に独立しており、特定のアルゴリズムの実装の詳細を顧客から隠す必要がある場合5. 戦略モードのアプリケーション シナリオ
1. システムが複数のアルゴリズムのうち 1 つを動的に選択する必要がある場合、それぞれのアルゴリズムは、 Strategy クラス
2. クラスは複数の動作を定義しており、これらの動作は、このクラスの操作で複数の条件ステートメントの形式で表示されます。各条件分岐はそれぞれのストラテジ クラスに移動できます。ステートメントは置き換えることができます4. アルゴリズムを使用する顧客が操作対象のデータを知られないようにシステムが要求する場合、戦略パターンを使用してアルゴリズムに関連するデータ構造を隠すことができます
5. の唯一の違いは複数のクラスはそれぞれ異なるパフォーマンス動作を示します。戦略パターンを使用して、実行時に実行する特定の動作を動的に選択できます
以上がコードを使用して Java の戦略パターンを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4
