ホームページ > Java > &#&チュートリアル > JAVA 抽象ファクトリー パターンの詳細な説明と例

JAVA 抽象ファクトリー パターンの詳細な説明と例

WBOY
リリース: 2022-04-20 20:56:19
転載
2762 人が閲覧しました

この記事では、java に関する関連知識を提供します。主に抽象ファクトリ パターンに関する関連事項を紹介します。実際の例に基づいて、抽象ファクトリ パターンとは何かを学びます。一緒にやってみましょう。それがみんなに役立つことを願っています。

JAVA 抽象ファクトリー パターンの詳細な説明と例

推奨学習: 「

Java ビデオ チュートリアル

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

#抽象ファクトリ (AbstractFactory) パターンの定義:

これは、関連オブジェクトまたは相互依存オブジェクトのセットを作成するためのインターフェイスをアクセス クラスに提供するインターフェイスであり、アクセス クラスは、同じファミリーを取得することができます。目的の製品の特定のクラスを指定する さまざまなレベルの製品のパターン構造。

条件を満たします:

システム内に複数の製品ファミリーがあり、各特定の工場は同じファミリーの異なる階層構造に属する製品を作成します。 。
  • システムは一度に 1 つのファミリーの製品のみを消費できます。つまり、同じファミリーの製品を一緒に使用できます。
利点:

    # 製品ファミリーに関連するマルチレベルの製品を、特に管理することなくクラス内で共同管理できます。管理用に複数の新しいクラスを導入します。
  • 製品ファミリーが必要な場合、抽象ファクトリーはクライアントが常に同じ製品の製品グループのみを使用することを保証できます。
  • 抽象ファクトリーはプログラムのスケーラビリティを強化し、新しい製品ファミリーを追加するときに、元のコードを変更して開始と終了の原則を満たす必要はありません。
欠点:

新しい製品を製品ファミリーに追加する必要がある場合、すべてのファクトリ クラスを変更する必要があります。これにより、システムの抽象性が高まり、理解が難しくなります。
  • 抽象ファクトリーの実装

この場合の主な役割は次のとおりです。

抽象ファクトリー:
の継承七英雄 ファクトリー(SimpleFactory):
マスター、ミストレス アブストラクトプロダクト(Product):
隕石(剣の原料)、鳩の卵の巣(未孵化の霊鳩) 具体的な製品:
セブンソード。七霊鳩

ケース:

マスターは七英雄の遺産を持ち、太陽の剣を鍛え、雄の小さな霊鳩を育てることができます。 主人の妻は七英雄の遺産を持っており、陰の剣を鍛え、雌の鳩を栽培することができます。
七英雄は主人と妻を見つけて、自分たちの剣を作り、自分たちの小さな鳩を養子にします。

抽象製品、製品

S1 インターフェイス (天外隕石):

インターフェイスでメソッドが宣言されています

public interface S1 {
    void show();}
ログイン後にコピー
S2 インターフェース (鳩の卵のネスト):

インターフェースはメソッド

public interface S2 {
    void show();}
ログイン後にコピー
A1 クラスを宣言します。インターフェイス S1 (Changhong Sword) の実装:

S1 インターフェイスの実装

public class A1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把长虹剑");

    }}
ログイン後にコピー
B1 クラス実装インターフェイス S1 (Ice Soul Sword):

S1 インターフェイスの実装

public class B1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把冰魄剑");

    }}
ログイン後にコピー
C1 クラス実装インターフェイス S1 (Ziyunjian):

S1 インターフェイスの実装

public class C1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}
ログイン後にコピー
D1 クラスはインターフェイス S1 (レインフラワーソード) を実装します:

S1 インターフェイスを実装します

public class D1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}
ログイン後にコピー
E1 クラスはインターフェイス S1 (Green Light Sword) を実装します。

Ss インターフェイスを実装します。

public class E1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}
ログイン後にコピー
F1 クラスはインターフェイス S1 (Ben Lei Sword) を実装します。 :

Ss インターフェイスの実装

public class F1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}
ログイン後にコピー
G1 クラスはインターフェイス S1 (トルネード ソード) を実装します:

Ss インターフェイスの実装

public class G1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}
ログイン後にコピー
A2 クラスはインターフェイス S2 (Lingge No. 1) を実装します。

S1 インターフェイスの実装
#
public class A2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");

    }}
ログイン後にコピー

クラス B2 はインターフェイス S2 (Lingge No. 2) を実装します。

S1 インターフェイスを実装します

public class B2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");

    }}
ログイン後にコピー

C2 クラスはインターフェイスを実装しますインターフェイス S2 (Lingge No. 3):

S1 インターフェイスを実装します

public class C2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}
ログイン後にコピー

D2 クラスはインターフェイス S2 (Lingge No. 4) を実装します :

S1 インターフェイスの実装

public class D2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}
ログイン後にコピー

E2 クラスはインターフェイス S2 (Lingge No. 5) を実装します:

Ss インターフェイスの実装

public class E2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}
ログイン後にコピー

F2 クラスはインターフェイス S2 (Lingge No. 6) を実装します。

Ss インターフェイスの実装

#
public class F2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}
ログイン後にコピー

G2 クラスはインターフェイス S2 (Lingge No. 7) を実装します。

Ss インターフェイスを実装します

public class G2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}
ログイン後にコピー
抽象ファクトリ、ファクトリ

Zz インターフェース (七英雄の伝説):

このインターフェースでは、剣を作るメソッド abc1() と鳩を育てるメソッド abc2()# を宣言しています。 ##

public interface Zz {
    S1 abc1(String a);
    S2 abc2(String a);}
ログイン後にコピー
Nan クラスはインターフェース Zz (マスター) を実装します:

Zz インターフェースを実装します

public class Nan implements Zz {
    private static S1 s1;
    private static S2 s2;

    public S1 abc1(String a) {
        if ("长虹剑".equals(a)) {
            s1 = new A1();
        } else if ("奔雷剑".equals(a)) {
            s1 = new F1();
        } else if ("青光剑".equals(a)) {
            s1 = new E1();
        } else if ("雨花剑".equals(a)) {
            s1 = new D1();
        } else if ("旋风剑".equals(a)) {
            s1 = new G1();
        } else {
            System.out.println("铸剑失败");
        }
        return s1;
    }
    public S2 abc2(String a) {
        if ("灵鸽一号".equals(a)) {
            s2 = new A2();
        } else if ("灵鸽二号".equals(a)) {
            s2 = new F2();
        } else if ("灵鸽三号".equals(a)) {
            s2 = new E2();
        } else if ("灵鸽四号".equals(a)) {
            s2 = new D2();
        } else if ("灵鸽五号".equals(a)) {
            s2 = new G2();
        } else {
            System.out.println("领养失败");
        }
        return s2;
    }}
ログイン後にコピー
Nvクラス インターフェイス Zz の実装 (マスター ニアン):

Zz インターフェイスの実装

public class Nv implements Zz {
    private static S1 s1;
    private static S2 s2;

    public S1 abc1(String a) {
        if ("冰魄剑".equals(a)) {
            s1 = new B1();
        } else if ("紫云剑".equals(a)) {
            s1 = new C1();
        } else {
            System.out.println("铸剑失败");
        }
        return s1;
    }
    public S2 abc2(String a) {
        if ("灵鸽六号".equals(a)) {
            s2 = new B2();
        } else if ("灵鸽七号".equals(a)) {
            s2 = new C2();
        } else {
            System.out.println("领养失败");
        }
        return s2;
    }}
ログイン後にコピー
Test

テスト クラス:


public class Demo {
    public static void main(String[] args) {
        System.out.println("---------至阳传承-------------");
        //师傅
        Nan nan = new Nan();
        //造剑
        S1 a1 = nan.abc1("长虹剑");
        S1 d1 = nan.abc1("雨花剑");
        S1 e1 = nan.abc1("青光剑");
        S1 f1 = nan.abc1("奔雷剑");
        S1 g1 = nan.abc1("旋风剑");
        //养鸽子
        S2 a2 = nan.abc2("灵鸽一号");
        S2 d2 = nan.abc2("灵鸽二号");
        S2 e2 = nan.abc2("灵鸽三号");
        S2 f2 = nan.abc2("灵鸽四号");
        S2 g2 = nan.abc2("灵鸽五号");
        a1.show();
        d1.show();
        e1.show();
        f1.show();
        g1.show();
        a2.show();
        d2.show();
        e2.show();
        f2.show();
        g2.show();
        System.out.println("---------至阴传承-------------");
        //女铸剑师
        Nv nv = new Nv();
        S1 b1 = nv.abc1("冰魄剑");
        S1 c1 = nv.abc1("紫云剑");
        b1.show();
        c1.show();
        S2 b2 = nv.abc2("灵鸽六号");
        S2 c2 = nv.abc2("灵鸽七号");
        b2.show();
        c2.show();
    }}
ログイン後にコピー
推奨学習: 「

Java ビデオ チュートリアル

以上がJAVA 抽象ファクトリー パターンの詳細な説明と例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート