JAVA デザイン パターン 3: 創造的なデザイン パターンである抽象ファクトリー パターン

著者のホームページ:デザイナー Xiao Zheng
著者の簡単な紹介: JAVA テクノロジ、システム カスタマイズ、リモート ガイダンスに重点を置いた 3 年間の JAVA フルスタック開発経験、エンタープライズ デジタル トランスフォーメーションに専念、CSDN カレッジおよび Blue Bridge クラウド コースの認定講師。
主な方向: Vue、SpringBoot、WeChat アプレット

この記事では、Java デザイン パターンの Abstract Factory パターンについて説明し、サンプル コードを示します。Abstract Factory パターンは、具体的なクラスを指定せずに、一連の関連オブジェクトまたは相互依存オブジェクトを作成するためのインターフェイスを提供する作成デザイン パターンです。

ここに画像の説明を挿入します


1. 抽象ファクトリー パターンとは何ですか?

Abstract Factory パターンは、具体的なクラスを指定せずに、一連の関連オブジェクトまたは相互依存オブジェクトを作成するためのインターフェイスを提供する創造的なデザイン パターンです。

抽象ファクトリ パターンには、さまざまな製品を作成するためのいくつかのメソッドを宣言する抽象ファクトリ インターフェイスがあります。特定のファクトリ クラスはこのインターフェイスを実装し、特定の製品オブジェクトの作成を担当します。特定の各ファクトリ クラスは、関連する製品のセットに対応します。

抽象ファクトリ パターンの中心的な考え方は、オブジェクトの作成とオブジェクトの使用を分離することです抽象ファクトリ パターンを使用すると、クライアント コードは、特定の製品クラスに直接依存せずに、ファクトリ インターフェイスを通じて製品オブジェクトを作成できます。これにより、クライアントを特定の製品から切り離し、コードの柔軟性と拡張性を向上させることができます。

抽象ファクトリ パターンは次の3 3に適用されます。3つのシーンがあるので、よく見てください。

  1. 相互関連または相互依存する一連の製品オブジェクトを作成する必要があります。
  2. どの特定の製品を作成するかは、実行時に動的に決定する必要があります。
  3. 特定の製品の実装の詳細を隠し、外部に対しては抽象的なインターフェイスのみを提供する必要があります。

要約すると、抽象ファクトリ パターンは、抽象ファクトリ インターフェイスと具体的なファクトリ実装クラスを提供することでオブジェクトの作成と使用を分離し、一連の関連製品オブジェクトを作成する柔軟な方法を提供します。

ここに画像の説明を挿入します


2. 抽象ファクトリーパターンの例

以下は、抽象ファクトリ パターンを使用してさまざまなオペレーティング システム用のボタンとテキスト ボックスを作成する方法を示す簡単な Java コード例です。

まず、抽象 GUI コンポーネント インターフェイスと 2 つの特定の実装クラスを定義します。コードは次のとおりです。

// 抽象产品接口 - 按钮
interface Button {
    
    
    void render();
}

// 具体产品 - Windows按钮
class WindowsButton implements Button {
    
    
    @Override
    public void render() {
    
    
        System.out.println("Rendering a button in Windows style.");
    }
}

// 具体产品 - MacOS按钮
class MacOSButton implements Button {
    
    
    @Override
    public void render() {
    
    
        System.out.println("Rendering a button in MacOS style.");
    }
}

// 抽象产品接口 - 文本框
interface TextBox {
    
    
    void render();
}

// 具体产品 - Windows文本框
class WindowsTextBox implements TextBox {
    
    
    @Override
    public void render() {
    
    
        System.out.println("Rendering a text box in Windows style.");
    }
}

// 具体产品 - MacOS文本框
class MacOSTextBox implements TextBox {
    
    
    @Override
    public void render() {
    
    
        System.out.println("Rendering a text box in MacOS style.");
    }
}

次に、GUI コンポーネントを作成するための抽象ファクトリー インターフェイスを定義します。コードは次のとおりです。

// 抽象工厂接口
interface GUIFactory {
    
    
    Button createButton();
    TextBox createTextBox();
}

// 具体工厂 - Windows工厂
class WindowsGUIFactory implements GUIFactory {
    
    
    @Override
    public Button createButton() {
    
    
        return new WindowsButton();
    }

    @Override
    public TextBox createTextBox() {
    
    
        return new WindowsTextBox();
    }
}

// 具体工厂 - MacOS工厂
class MacOSGUIFactory implements GUIFactory {
    
    
    @Override
    public Button createButton() {
    
    
        return new MacOSButton();
    }

    @Override
    public TextBox createTextBox() {
    
    
        return new MacOSTextBox();
    }
}

最後に、抽象ファクトリを使用して特定の GUI コンポーネントを作成します。コードは次のとおりです。

public class Main {
    
    
    public static void main(String[] args) {
    
    
        // 创建Windows风格的GUI组件
        GUIFactory windowsFactory = new WindowsGUIFactory();
        Button windowsButton = windowsFactory.createButton();
        TextBox windowsTextBox = windowsFactory.createTextBox();

        windowsButton.render();
        windowsTextBox.render();

        // 创建MacOS风格的GUI组件
        GUIFactory macOSFactory = new MacOSGUIFactory();
        Button macOSButton = macOSFactory.createButton();
        TextBox macOSTextBox = macOSFactory.createTextBox();

        macOSButton.render();
        macOSTextBox.render();
    }
}

出力結果はオペレーティング システムのスタイルによって異なりますが、たとえば、Windowsこのシステムでは次のように出力されます。

Rendering a button in Windows style.
Rendering a text box in Windows style.

システム下ではMacOS、出力は次のようになります。

Rendering a button in MacOS style.
Rendering a text box in MacOS style.

抽象ファクトリ パターンを使用すると、特定の製品クラスに直接依存せずに、さまざまなファクトリに基づいてさまざまなスタイルの GUI コンポーネントを作成できます。

これによりコードの柔軟性が向上し、さまざまなスタイルの GUI コンポーネントを簡単に切り替えたり拡張したりできるようになります。

ここに画像の説明を挿入します


3. 抽象ファクトリーパターンの適用シナリオ

抽象ファクトリ パターンは、次のシナリオに適しています。

  1. 一連の関連または相互依存する製品オブジェクトを作成する必要がある: 抽象ファクトリ パターンは、それらの間に特定の関連付けや依存関係を持つ一連の関連製品オブジェクトを作成するのに役立ちます。たとえば、ゲームでは、さまざまな陣営のキャラクター、武器、装備を作成する必要がある場合がありますが、これらの製品間には一定の相関関係があります。
  2. 実行時にどの特定の製品を作成するかを動的に決定する必要がある: 抽象ファクトリ パターンを使用すると、実行時の条件や構成に基づいてどの特定の製品を作成するかを決定できます。この柔軟性により、さまざまなニーズに基づいてさまざまな製品を作成することができます。
  3. 特定の製品の実装の詳細を隠す必要があります: 抽象ファクトリ パターンは製品の作成と使用を分離します。クライアントは抽象ファクトリ インターフェイスと製品インターフェイスに注意を払うだけで済み、実装の詳細を気にする必要はありません。特定の製品の。これにより、コードの保守性とスケーラビリティが向上します。
  4. オープンクローズ原則を満たす必要がある: 抽象ファクトリ パターンはオープンクローズ原則を満たすことができます。つまり、拡張にはオープンですが、変更にはクローズです。既存のコードを変更せずに、新しい具体的なファクトリと製品クラスを追加することで、抽象ファクトリ パターンの機能を簡単に拡張できます。

抽象ファクトリ パターンは、一連の関連または相互依存する製品オブジェクトを作成し、実行時の条件または構成に基づいて特定の製品を作成することを決定する必要がある状況に適しています。これは、コードの柔軟性、保守性、拡張性を実現するのに役立ちます。

ここに画像の説明を挿入します


4. 工場パターンの面接での抽象的な質問

  1. 抽象ファクトリーパターンとは何ですか? それはどのような問題を解決しますか?
  2. 抽象ファクトリ パターンとファクトリ メソッド パターンの違いは何ですか?
  3. 抽象ファクトリー パターンの役割は何ですか?
  4. 抽象的なファクトリーパターンの簡単な例を挙げていただけますか?
  5. 抽象ファクトリ パターンはどのようなシナリオで使用するのが最適だと思いますか?

5. まとめ

この記事では Java デザインパターンの抽象ファクトリパターンとサンプルコードを説明し、次回は Java プロトタイプパターンについて説明します。

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_41464123/article/details/132635973