Javaファクトリメソッドパターンの実装方法

王林
リリース: 2023-05-20 22:19:15
転載
1193 人が閲覧しました

Javaファクトリメソッドパターンの実装方法


# 1. ファクトリ メソッド パターンとは何ですか?

ファクトリ メソッド パターン: 仮想コンストラクタ パターンまたはポリモーフィック ファクトリ パターンとも呼ばれ、クラス作成パターンに属します。

ファクトリ メソッド パターンでは、ファクトリの親クラスは製品オブジェクトを作成するためのパブリック インターフェイスの定義を担当し、ファクトリのサブクラスは特定の製品オブジェクトの生成を担当します。この目的はインスタンス化することです。製品クラス 操作はファクトリ サブクラスに延期されます。つまり、ファクトリ サブクラスは、どの特定の製品クラスをインスタンス化するかを決定するために使用されます。

今日の実際の工場における分業は、ますます詳細かつ専門化していることがわかっています。 。さまざまな製品が専門工場で生産され、自給自足の小規模農家経済の時代に完全に別れを告げ、製品の生産サイクルが大幅に短縮され、生産効率が向上します。ファクトリ メソッド パターンは、開閉の原則を満たすだけでなく、単純なファクトリ パターンの利点も継承しています。

例:

単純なファクトリ パターン記事の Coke 工場では、ファクトリ クラスが 1 つしかないため、すべての製品をこのクラスで修正および修正する必要があります。調整、工場方式モデルは複数の工場を持ち、各工場で一つの製品を生産するモデルで、新しい製品を追加する必要がある場合は、直接新しい工場を作成でき、他の工場内で変更する必要はありません。それは開閉の原則と一致しています。

2. ファクトリ メソッド パターンの長所と短所

利点:

  • ユーザーは名前だけを知る必要があります。特定の工場 必要な製品を入手するために、製品の具体的な作成プロセスを知る必要はありません

  • 柔軟性の向上 新しい製品の作成には、次のように記述するだけで済みます対応するもう 1 つのファクトリ クラス

  • 典型的なデカップリング フレームワーク。デメテルの法則、依存性反転原理、およびリヒター置換原理に従って、高レベルのモジュールは、他の実装クラスを考慮せずに、製品の抽象クラスにアクセスするだけで済みます。

欠点:

  • クラスが多すぎると複雑さが増しやすくなります

  • ##抽象化が進み、システムの理解が難しくなります
  • 抽象プロダクトは 1 つのプロダクトしか生成できません。この欠点は、
  • Abstract Factory Pattern

    を使用して解決できます (Abstract Factory Pattern については次の記事で説明します)

  • 3. パターンの構造と実装

構造は次の 4 つの部分で構成されます:

    Abstract Factory: プロダクトを作成するためのインターフェイスを提供します。呼び出し元は、具体的なファクトリのファクトリ メソッド newProduct() にアクセスして製品を作成します。
  • コンクリート ファクトリ (ConcreteFactory): 主に抽象ファクトリ内の抽象メソッドを実装し、特定の製品の作成
  • 抽象製品 (製品): 製品の仕様を定義し、製品の主な特徴と機能を説明します
  • 具体的なプロダクト (ConcreteProduct): 抽象的なプロダクトを実装します。 ロールで定義されたインターフェイスは特定のファクトリによって作成され、特定のファクトリと 1 対 1 で対応します
構造図:

Javaファクトリメソッドパターンの実装方法4. ファクトリ メソッド パターン コードの実装

前の記事のコーラ工場を例に挙げてみましょう:

製品には、コカ・コーラ、ペプシ・コーラ、無糖コーラが含まれます。
単純な工場パターンでは、3 つの製品を生産できるコーラ工場は 1 つだけあります。ファクトリー・メソッド・パターンでは、 、対応する製品を生成する複数の工場が存在する可能性があります:

抽象工場:

Cola Factory (メイン工場として理解できます)Pepsi-Cola Factory:
ペプシ コーラの生成 #コカ コーラ工場: コカ コーラの生成
#無糖コーラ工場: 無糖コーラの生成
コーラの製造方法:

/**
 *  提供了产品的接口
 */public interface Cola {

    //生产可乐的方法
    public void cola();}
ログイン後にコピー

Cola Abstract Factory:

/**
 * 可乐抽象工厂(可以理解成可乐总厂,旗下还有很多分厂)
 */public interface ColaFactory {

    public Cola newCola();}
ログイン後にコピー

3 種類のコーラの製造方法:

コーラ Coke:

/**
 * 产品名称:可乐可乐,实现了产品的接口
 */public class CocaCola implements Cola{

    @Override
    public void cola() {
        System.out.println("开始生产可口可乐");
    }}
ログイン後にコピー
ペプシコーラ:
/**
 *
 * 产品名称:百事可乐,实现了产品的接口
 */public class PepsiCola implements Cola{

    @Override
    public void cola() {
        System.out.println("开始生产百事可乐");
    }}
ログイン後にコピー

無糖コーラ:

/*
 * 产品名称:无糖可乐,实现了产品的接口
 */public class SugarFreeCola implements Cola{

    @Override
    public void cola() {
        System.out.println("开始生产无糖可乐");
    }}
ログイン後にコピー

3 つの製品が対応します 3 つの工場:

コカ・コーラを生産する工場:

/**
 *
 * 具体工厂1:可口可乐工厂
 */public class CocaColaFactory implements ColaFactory{
    
    @Override
    public Cola newCola() {
        System.out.println("我是可乐工厂下面的可口可乐工厂");
        return new CocaCola();
    }}
ログイン後にコピー
ペプシ・コーラを生産する工場:

/**
 *
 * 具体工厂2:百事可乐工厂
 */public class PepsiColaFactory implements ColaFactory{

    @Override
    public Cola newCola() {
        System.out.println("我是可乐工厂下面的百事可乐工厂");
        return new PepsiCola();
    }}
ログイン後にコピー

無糖コーラを生産する工場:

/*
 * 具体工厂3:无糖可乐工厂
 */public class SugarFreeColaFactory implements ColaFactory{
    
    @Override
    public Cola newCola() {
        System.out.println("我是可乐工厂下面的无糖可乐工厂");
        return new SugarFreeCola();
    }}
ログイン後にコピー

コークスの製造方法

  • コークス工場 (以下に複数の小さな工場があります) 工場)

  • 3 種類のコークを生産するための 3 つの方法 (Coke インターフェイスの実装)

  • 3 つのコーク工場 (3 種類のコークを生産するため、コーラ工場インターフェース)

  • テスト クラス:
public class Test {
    public static void main(String[] args) {

        try{

            //新建一个可乐方法对象
            Cola a;

            //新建一个可乐工厂对象
            ColaFactory af;

            //告诉可乐工厂,你需要什么可乐,并且通知对应的分工厂
            af = (ColaFactory) new PepsiColaFactory();
            //执行对于生产方法
            a = af.newCola();
            a.cola();
            
        }catch (Exception e ){
            System.out.println(e.getMessage());
        }
    }}
ログイン後にコピー

たとえば、今ペプシが必要な場合は、af でペプシ工場を渡します:

我是可乐工厂下面的无糖可乐工厂
开始生产无糖可乐
ログイン後にコピー

CocaColaFactory

で渡された場合:

我是可乐工厂下面的可口可乐工厂
开始生产可口可乐
ログイン後にコピー

以上がJavaファクトリメソッドパターンの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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