blog

まだ新しいオブジェクトの中にいるのか?オブジェクトを生成するための「抽象ファクトリーパターン」を使えば、臭いはしない!

今日は、ファクトリーデザインパターンに属するAbstract Factoryパターンを紹介します。 ファクトリーパターンは、特定の、特定の型、またはオブジェクトのバッチを大量に作成するときに使用される...

Apr 23, 2020 · 4 min. read
シェア

今日は、ファクトリーデザインパターンに属するAbstract Factoryパターンを紹介します。

簡単

ファクトリーパターンの理解は、我々はすべてのファクトリーパターンは、特定の、特定のクラス、またはオブジェクトのバッチの数が多い優れたソリューションを作成するために使用されていることを知っています。この記事では、"抽象ファクトリーパターン"は、ファクトリーパターンの現れであり、構築パターンの一つである紹介します。

Abstract Factoryパターンには、Abstract Productロール、Concrete Productロール、Abstract Factoryロール、Concrete Factoryロールの4つのロールがあります

実際、"抽象ファクトリーパターン"を理解することは非常に良いですが、私はあなたに小さな例を与える、あなたは優秀な読者が理解することができるはずです、それは誰もが理解し、覚えて便利であるように、それに上記の4つの役割を覚えて時間を見てください。

車を生産したいオーナー。

国産車、SVUなど、この時点で工場をすることができます:ビジネスの冒頭では、このように国産車を生産することを選択し、間違いなく小さいです。

上司は、操作の期間の後、お金を作るだけでなく、 "国産車 "の生産を満たすだけでなく、 "合弁会社の車 "を生産したい、拡大したいときは、この時間と工場を開く必要があります。業界の継続的な発展に伴い、将来的には確かに、電気、石油などの他の車が含まれます......その後、上司として管理を容易にするために、確かに規範のセットを開発するために、"本社 "を設定する必要がありますので、他の子会社が遵守することです。しかし、どのように特定の子会社が車を作るために、本社は知っている必要はありません。

この一連のパターンをプログラミングに適用すると、Abstract Factoryパターンになります。

コーディング

文章で説明しただけでは、よく分からないと思いますので、以下に文章をコード化することで、「Abstract Factory Pattern」の理解を深めていただきたいと思います。

Abstract Product Role」のコード:

/**
 * 車両抽象クラス
 */
public abstract class Vehicle {
 /**
 * 生産車の抽象的な方法
 */
 public abstract void production();
}

製品固有の役割」のコード:

/**
 * 国産セダン
 */
public class DomesticCar extends Vehicle {
 @Override
 public void production() {
 System.out.println("国産車をプロデュースする");
 }
}
/**
 *  SUV
 */
public class DomesticSUV extends Vehicle {
 @Override
 public void production() {
 System.out.println("国産SUVをプロデュースする");
 }
}
/**
 * 国産トラック
 */
public class DomesticTruck extends Vehicle {
 @Override
 public void production() {
 System.out.println("国産ローリーをプロデュースする");
 }
}
/**
 * ジョイント・ベンチャー・セダン
 */
public class JointVentureCar extends Vehicle {
 @Override
 public void production() {
 System.out.println("ジョイント・ベンチャー・カーをプロデュースする");
 }
}
/**
 *  SUV
 */
public class JointVentureSUV extends Vehicle {
 @Override
 public void production() {
 System.out.println("合弁会社SUVの生産");
 }
}
/**
 * ジョイント・ベンチャー・ローリー
 */
public class JointVentureTruck extends Vehicle {
 @Override
 public void production() {
 System.out.println("ジョイント・ベンチャー・ローリーをプロデュースする");
 }
}

Abstract Factory Role」のコード:

/**
 * 抽象ファクトリー・インターフェイス
 */
public interface AbsFactory {
 // 車両のサブクラスのインスタンスを作成する方法。
 Vehicle createVehicle(String vehicleType);
}

特定の工場の役割」のコード:

/**
 * 国産車工場の生産
 */
public class DomesticFactory implements AbsFactory {
 @Override
 public Vehicle createVehicle(String vehicleType) {
 Vehicle vehicle = null;
 switch (vehicleType) {
 case "car":
 vehicle = new DomesticCar();
 break;
 case "suv":
 vehicle = new DomesticSUV();
 break;
 case "truck":
 vehicle = new DomesticTruck();
 break;
 }
 return vehicle;
 }
}
/**
 * 合弁自動車工場の生産
 */
public class JointVentureFactory implements AbsFactory {
 @Override
 public Vehicle createVehicle(String vehicleType) {
 Vehicle vehicle = null;
 switch (vehicleType) {
 case "car":
 vehicle = new JointVentureCar();
 break;
 case "suv":
 vehicle = new JointVentureSUV();
 break;
 case "truck":
 vehicle = new JointVentureTruck();
 break;
 }
 return vehicle;
 }
}

テストクラス:

public class Demo {
 public static void main(String[] args) {
 AbsFactory domesticFactory = new DomesticFactory();
 domesticFactory.createVehicle("car").production();
 JointVentureFactory jointVentureFactory = new JointVentureFactory();
 jointVentureFactory.createVehicle("car").production();
 }
}

概要

長所:

オブジェクトのインスタンス化は、限り、ファクトリクラスは、大幅にコードの再利用性を向上させる得ることができるように、個別に作成する必要はありません。また、オブジェクトを作成するプロセスを考慮する必要はありません、唯一の結果に焦点を当てることができる、また、ソフトウェアのカプセル化を向上させます。

欠点:

抽象ファクトリー・パターンはソフトウェアの拡張に適しておらず、新しい製品が追加されるたびに多くのクラスを修正する必要があります。

ルーキー」の記事も悪くないと感じたら、くださいあなたのサポートが持続するために私の力です。また、あなたが指摘することができ、私はオープンマインドで教えられますことを願って問題を書くためにどこの記事。

Read next

eclipse Theia ドキュメント - 翻訳

最初のプラグインを作成します。例として、Hello Worldコマンドの "Hello world!"通知を表示するために登録します。この記事では、必要なステップをすべて説明します。 Theiaは拡張可能なIDEです。拡張機能とはIDEをカスタマイズする方法だと聞いたことがあるかもしれません。プラグインは、Theia の拡張モデルに最近追加されたものです。ここでは、マテリア...

Apr 22, 2020 · 2 min read