検索
ホームページJava&#&チュートリアルJava 設計パターン戦略パターンの例分析

1. 基本的な紹介

1) ストラテジー パターンでは、アルゴリズム ファミリ (ストラテジー グループ) が個別に定義され、相互に置き換えることができるようにカプセル化されます。このモードでは、アルゴリズムの変更を独立して行うことができます。アルゴリズムを使用する人

2) このアルゴリズムは、いくつかの設計原則を具体化しています。第一に、変更するコードと未変更のコードを分離します。第二に、具体的なクラス (定義 (ポリシー インターフェイス) ではなくインターフェイス プログラミングを対象とします。第三に、組み合わせを使用します)。 /集約を多くし、継承を少なくする (お客様は組み合わせによる戦略を使用します)

例: 環境省エネルギーについては、ベースバンド ボードの省エネルギー、SPC の省エネルギー、製品の省エネルギー、さまざまな省エネルギーの 3 つの省エネルギー方法が提案されています。

#2. 従来の方法

# (1) クラス図

Java 設計パターン戦略パターンの例分析

(2) コーディング実装

1) EsPolicy 抽象クラスを定義し、esPolicyHandler メソッドを定義します

public abstract class EsPolicy {
    public void esPolicyHandler() {
    }
}

2) BbEsPolicy は EsPolicy を継承し、esPolicyHandler メソッドをオーバーライドします

public class BbEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===处理基带板节能策略===");
    }
}

3) SpcEsPolicy は EsPolicy を継承し、 esPolicyHandler メソッド

public class SpcEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===Spc节能策略处理===");
    }
}

4) ProdEsPolicy は EsPolicy を継承し、esPolicyHandler メソッドをオーバーライドします

public class ProdEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===产品节能策略处理===");
    }
}

5) テスト

public class EsPolicyTest {
    public static void main(String[] args) {
        EsPolicy bbEsPolicy = new BbEsPolicy();
        bbEsPolicy.esPolicyHandler();
        SpcEsPolicy spcEsPolicy = new SpcEsPolicy();
        spcEsPolicy.esPolicyHandler();
        ProdEsPolicy prodPolicy = new ProdEsPolicy();
        prodPolicy.esPolicyHandler();
    }
}

実行結果

===ベースバンド ボードの処理の省エネルギー戦略===

===Spc の省エネルギー戦略の処理===
===製品の省エネルギー戦略の処理===

問題: 従来の方法では、サブクラスが親クラスを継承し、親クラスのメソッドをオーバーライドすることで、異なるサブクラスの異なる動作を実現します。クラスへのローカルな変更、特にスーパークラスへのローカルな変更は、他の部分に影響を及ぼし、波及効果をもたらします

3. 戦略パターンの採用

(1) クラス図

Java 設計パターン戦略パターンの例分析

(2) コーディング実装

1) 戦略の定義インターフェイスと抽象メソッドを定義します

public interface EsPolicyHandler {
    void esPolicyHandler();
}

2) BbEsPolicyHandler はポリシー インターフェイスを実装し、esPolicyHandler メソッドを実装します

public class BbEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===基带板节能策略处理===");
    }
}

3) SpcEsPolicyHandler はポリシー インターフェイスを実装し、esPolicyHandler メソッドを実装します

public class SpcEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===Spc节能策略处理===");
    }
}

4) ProdEsPolicyHandler ポリシー インターフェイスを実装し、esPolicyHandler メソッドを実装します

public class ProdEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===产品节能策略处理===");
    }
}

5) EsPolicy 抽象クラスを定義し、その属性として EsPolicyHandler を挿入します

public abstract class EsPolicy {
    EsPolicyHandler esPolicyHandler;
    public void setEsPolicyHandler(EsPolicyHandler esPolicyHandler) {
        this.esPolicyHandler = esPolicyHandler;
    }
    public void esPolicyHandler() {
        if (null != esPolicyHandler) {
            esPolicyHandler.esPolicyHandler();
        }
    }
}

6) BbEsPolicy は EsPolicy を継承し、esPolicyHandler インターフェイス属性をインスタンス化しますコンストラクター内

public class BbEsPolicy extends EsPolicy {
    public BbEsPolicy() {
        esPolicyHandler = new BbEsPolicyHandler();
    }
}

7) SpcEsPolicy は EsPolicy を継承し、コンストラクター

public class SpcEsPolicy extends EsPolicy {
    public SpcEsPolicy() {
        esPolicyHandler = new SpcEsPolicyHandler();
    }
}

で esPolicyHandler インターフェース プロパティをインスタンス化します。8) ProdEsPolicy は EsPolicy を継承し、コンストラクター

public class ProdEsPolicy extends EsPolicy {
    public ProdEsPolicy() {
        esPolicyHandler = new ProdEsPolicyHandler();
    }
}
# で esPolicyHandler インターフェース プロパティをインスタンス化します。 ## 9) テスト

public class EsPolicyTest {
    public static void main(String[] args) {
        BbEsPolicy bbEsPolicy = new BbEsPolicy();
        bbEsPolicy.esPolicyHandler();
        SpcEsPolicy spcEsPolicy = new SpcEsPolicy();
        spcEsPolicy.esPolicyHandler();
        ProdEsPolicy prodEsPolicy = new ProdEsPolicy();
        prodEsPolicy.esPolicyHandler();
    }
}

10) 実行結果

===ベースバンド ボードの省エネ戦略の処理===
===Spc の省エネ戦略の処理===

===製品省エネ戦略処理===

4.戦略モデルの注意事項と詳細

1) 戦略モデルのポイントは: プロジェクトの変更部分と変更されていない部分を分析する パート

2) 戦略パターンの核となるアイデアは次のとおりです: 組み合わせ/集約をより多く使用し、継承を少なくする; 動作の継承の代わりに動作クラスの組み合わせを使用するこれはより柔軟です;

3) 「変更には近く、拡張にはオープン」の原則を体現しており、クライアントは元のコードを変更せずに動作を追加します。追加する必要があるのは戦略 (または動作) だけであり、複数の転送ステートメントの使用 (if.​​..else if...else)

4) 継承関係を置き換える方法を提供します。ストラテジ パターンはアルゴリズムを独立したストラテジ クラスにカプセル化し、変更できるようにします。コンテキストから独立しているため、切り替え、理解、拡張が容易になります

5) ストラテジーが追加されるたびに、クラスも追加されることに注意してください。多くの戦略を使用すると、膨大な数のクラスが生成されます。

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

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター