この記事では、java に関する関連知識を提供します。主にファクトリ メソッド パターンに関連する問題を紹介します。ファクトリ メソッド パターンは、仮想コンストラクタ パターンまたはポリモーフィック ファクトリ パターンとも呼ばれます。クラス作成モードについて、皆さんのお役に立てれば幸いです。
推奨学習: 「java チュートリアル 」
ファクトリ メソッド パターン: 仮想コンストラクタ パターンまたはポリモーフィック ファクトリ パターンとも呼ばれ、クラス作成パターンに属します。
ファクトリ メソッド パターンでは、ファクトリの親クラスは製品オブジェクトを作成するためのパブリック インターフェイスの定義を担当し、ファクトリのサブクラスは特定の製品オブジェクトの生成を担当します。この目的はインスタンス化することです。製品クラス 操作はファクトリ サブクラスに延期されます。つまり、ファクトリ サブクラスは、どの特定の製品クラスをインスタンス化するかを決定するために使用されます。
今日の実際の工場における分業は、ますます詳細かつ専門化していることがわかっています。 。さまざまな製品が専門工場で生産され、自給自足の小規模農家経済の時代に完全に別れを告げ、製品の生産サイクルが大幅に短縮され、生産効率が向上します。ファクトリ メソッド パターンは、開閉の原則を満たすだけでなく、単純なファクトリ パターンの利点も継承しています。
例:
単純なファクトリ パターン記事の Coke 工場では、ファクトリ クラスが 1 つしかないため、すべての製品をこのクラスで修正および修正する必要があります。調整、工場方式モデルは複数の工場を持ち、各工場で一つの製品を生産するモデルで、新しい製品を追加する必要がある場合は、直接新しい工場を作成でき、他の工場内で変更する必要はありません。それは開閉の原則と一致しています。
利点:
ユーザーは名前だけを知る必要があります。特定の工場 必要な製品を入手するために、製品の具体的な作成プロセスを知る必要はありません
柔軟性の向上 新しい製品の作成には、次のように記述するだけで済みます対応するもう 1 つのファクトリ クラス
典型的なデカップリング フレームワーク。高レベルのモジュールは、製品の抽象クラスのみを知っていればよく、他の実装クラスについて気にする必要はなく、デメテルの法則、依存関係逆転原則、およびリヒター置換原則を満たします
#欠点:
Abstract Factory Pattern (Abstract Factory Pattern については次の記事で説明します)## を使用して解決できます。
4. ファクトリ メソッド パターン コードの実装
前回の記事からコーラ工場を取り上げましょう。例として:
単純な工場パターンでは、コーラ工場は 1 つだけあり、3 つの製品を生産できます。ファクトリ メソッド パターンでは、対応する製品を生成する複数のファクトリが存在する可能性があります。
抽象ファクトリ:
Cola Factory (メイン ファクトリとして理解できます)
Pepsi-コーラ工場: ペプシコーラの生成
コカコーラ工場: コカコーラの生成
無糖コーラ工場: 無糖コーラの生成
コーラの製造方法:
/** * 提供了产品的接口 */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 種類のコーラを生産する) Coke の、Coke ファクトリー インターフェイスの実装)
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教程》我是可乐工厂下面的无糖可乐工厂
开始生产无糖可乐
我是可乐工厂下面的可口可乐工厂
开始生产可口可乐
5、总结
以上がJavaファクトリメソッドパターンの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。