Javaデザインパターンのファクトリパターンを実装する方法

WBOY
リリース: 2023-05-23 18:49:06
転載
1472 人が閲覧しました

詳細は次のとおりです:

#ファクトリ モードは主にオブジェクト作成のための遷移インターフェイスを提供し、オブジェクト作成の特定のプロセスを保護および分離して柔軟性を向上させるという目的を達成します

ファクトリー モードは次の 3 つのカテゴリに分かれています:

1) シンプル ファクトリ: 一連の製品の生産には役に立たない;

2) ファクトリ メソッド: ポリモーフィック ファクトリとも呼ばれます;
3 ) 抽象ファクトリー パターン (Abstract Factory): ツールボックスとしても知られ、製品ファミリーを生成しますが、新しい製品の生成には役立ちません;

1. 単純なファクトリー パターン

シンプルファクトリパターンは静的ファクトリメソッドパターンとも呼ばれます。名前の変更から、このモードは非常に単純であることがわかります。その目的は単純で、オブジェクトを作成するためのインターフェイスを定義することです。

単純なファクトリ パターンでは、ファクトリ クラスが製品クラスのインスタンス化呼び出しの中心にあり、通過する車両の流れの中に立ってどの車両を通過させるかを決める交通警察官と同じように、どの製品クラスをインスタンス化するかを決定します。一方向の車両はその方向に流れます。まずその構成を見てみましょう:

1) ファクトリーの役割: これはこのモデルの中核であり、特定のビジネス ロジックと判断ロジックが含まれています。 Java では、多くの場合、具象クラスによって実装されます。

2) 抽象的な製品の役割: これは通常、特定の製品または実装されたインターフェイスによって継承される親クラスです。 Javaではインターフェースまたは抽象クラスによって実装されます。
3) 特定の製品ロール: ファクトリ クラスによって作成されたオブジェクトは、このロールのインスタンスです。 Javaの具象クラスによって実装されます。

2. ファクトリ メソッド パターン

ファクトリ メソッド パターンは、単純なファクトリ パターンをさらに抽象化し、推進したものです。ファクトリ メソッド パターンは、もはや 1 つだけで決定されるわけではありません。ファクトリ クラス. 製品クラスをインスタンス化するかどうかの決定は、抽象ファクトリのサブクラスに委ねられます。その構成を見てみましょう:

1) 抽象ファクトリ ロール: これはファクトリ メソッド パターンの中核であり、アプリケーションとは何の関係もありません。これは、特定のファクトリ ロールが実装する必要があるインターフェイス、または継承する必要がある親クラスです。 Java では、抽象クラスまたはインターフェイスによって実装されます。

2) 特定のファクトリ ロール: 特定のビジネス ロジックに関連するコードが含まれています。特定の製品に対応するオブジェクトを作成するためにアプリケーションによって呼び出されます。
3) 抽象的な製品の役割: 特定の製品または実装されたインターフェイスによって継承される親クラスです。 Java では、通常、実装する抽象クラスまたはインターフェイスが存在します。
4) 特定の製品ロール: 特定のファクトリ ロールによって作成されたオブジェクトは、このロールのインスタンスです。 Java の特定のクラスによって実装されます。

ファクトリ メソッド パターンは、抽象ファクトリ ロールから継承された複数のサブクラスを使用して、単純なファクトリ パターンの「神クラス」を置き換えます。上で述べたように、これによりオブジェクトへの圧力が共有され、新製品 (新興車など) が生産されるとき、それが抽象的な製品の役割と抽象的な工場の役割に従って提供される限り、構造がより柔軟になります。コントラクトが生成され、顧客は既存のコードを変更することなく使用できます。工場の役割の構造も開閉原理に準拠していることがわかります。

コードは次のとおりです:

//抽象产品角色
public interface Moveable {
  void run();
}
//具体产品角色
public class Plane implements Moveable {
  @Override
  public void run() {
    System.out.println("plane....");
  }
}
public class Broom implements Moveable {
  @Override
  public void run() {
    System.out.println("broom.....");
  }
}
//抽象工厂
public abstract class VehicleFactory {
  abstract Moveable create();
}
//具体工厂
public class PlaneFactory extends VehicleFactory{
  public Moveable create() {
    return new Plane();
  }
}
public class BroomFactory extends VehicleFactory{
  public Moveable create() {
    return new Broom();
  }
}
//测试类
public class Test {
  public static void main(String[] args) {
    VehicleFactory factory = new BroomFactory();
    Moveable m = factory.create();
    m.run();
  }
}
ログイン後にコピー

3. 抽象ファクトリ パターン

コードは次のとおりです

//抽象工厂类
public abstract class AbstractFactory {
  public abstract Vehicle createVehicle();
  public abstract Weapon createWeapon();
  public abstract Food createFood();
}
//具体工厂类,其中Food,Vehicle,Weapon是抽象类,
public class DefaultFactory extends AbstractFactory{
  @Override
  public Food createFood() {
    return new Apple();
  }
  @Override
  public Vehicle createVehicle() {
    return new Car();
  }
  @Override
  public Weapon createWeapon() {
    return new AK47();
  }
}
//测试类
public class Test {
  public static void main(String[] args) {
    AbstractFactory f = new DefaultFactory();
    Vehicle v = f.createVehicle();
    v.run();
    Weapon w = f.createWeapon();
    w.shoot();
    Food a = f.createFood();
    a.printName();
  }
}
ログイン後にコピー
抽象ファクトリー パターン、抽象製品 (AbstractProduct) は 1 つまたは複数であり、したがって 1 つまたは複数の製品ファミリー (Product Family) を形成します。製品ファミリーが 1 つだけの場合、抽象ファクトリ パターンは実際にはファクトリ メソッド パターンに縮退します。

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

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