「設計Pattern」抽象ファクトリモード


抽象ファクトリモード


  • アレイの作成

  • 特定のクラスに依存することなく、相互に関連付けられたオブジェクトまたは依存するオブジェクトの組合せを作成するためのインタフェースを提供するモード.
  • は、詳細なサブクラス
  • を定義することなく、相互に関連または独立した複数のオブジェクトグループを作成するためのインタフェースを提供する.

    こうぞう


  • AbstractFactory
  • 実工場類汎用インタフェース
  • ConcreteFactory
  • 具体的な工場類は,抽象抽象抽象手法の拡張により具体的な製品を生成する.
  • AbstractProduct
  • 製品共通インタフェース
  • ConcreteProduct
  • 特定工場類生成の具体製品
  • インプリメンテーション


    1.応用工場方法モデル


    部品を購入する工場は、現在S社とK社があるということでしょう.
    MotorFactory.class
    public class MotorFactory{
    
        public static Motor createMotor(String vendorID) {
            Motor motor = null;
    
            switch (vendorID) {
                case "S":
                    motor = new S_Motor();
                    break;
                case "K":
                    motor = new K_Motor();
                    break;
            }
            return motor;
        }
    }
  • ベンダーに従ってモータ
  • を作成して戻す.
    DoorFactory.class
    public class DoorFactory {
    
        public static Door createDoor(String vendorID) {
            Door door = null;
    
            switch (vendorID) {
                case "S":
                    door = new S_Door();
                    break;
                case "K":
                    door = new K_Door();
                    break;
            }
            return door;
        }
    }
  • 仕入先に従ってDORを作成し、
  • に戻る.
    Main.class
    public class Main {
    
        public static void main(String[] args) {
            Door S_Door = DoorFactory.createDoor("S");
            Motor S_Motor = MotorFactory.createMotor("S");
    
            S_Door.open();
            S_Motor.move();
        }
    }
    S_Door Open
    S_Motor Move
  • 使用:
  • に質問

  • 他のメーカーの部品に変更する必要があります
  • S社ではなくK社に変更した場合
  • ファクトリを呼び出すには、DORとMotorのパラメータ値をKに変更する必要があります.
  • 部品の種類が20個の場合、20箇所のパラメータ値は
  • に変更されます.
  • 部品の数が増えるにつれて、特定のエンタープライズ部品を生成するコード長が長くなり、複雑になります.
  • の新しい製造元部品が追加されました
  • DOOR Factoryクラスだけでなく、残りの部品に関連付けられたFactoryクラスでも、サムスン部品の作成に変更します.
  • も同様に、これらすべてを変更して、特定のメーカー部品を生成するコードに三星部品を生成する必要があります.
  • その結果、既存のファクトリメソッドモードを使用して作成されたオブジェクトは、複数の関連オブジェクトを一貫した方法で作成すると、多くのコード変更が発生します.

    2.抽象工場モデルの適用


    Factory.class
    public abstract class Factory {
    
        abstract Motor createMotor();
        abstract Door createDoor();
    }
  • MotorとDoorを生成するファクトリ抽象クラス
  • S_Factory.class
    public class S_Factory extends Factory{
    
        @Override
        Motor createMotor() { return new S_Motor(); }
    
        @Override
        Door createDoor() { return new S_Door(); }
    }
    K_Factory.class
    public class K_Factory extends Factory {
    
        @Override
        Motor createMotor() { return new K_Motor(); }
    
        @Override
        Door createDoor() { return new K_Door(); }
    }
  • は、部品系列ではなく、製造者系列で実施する
  • である.

    Main.class
    public class Main {
    
        public static void main(String[] args) {
    
            Factory factory = new S_Factory();
            Motor motor = factory.createMotor();
            Door door = factory.createDoor();
    
            door.open();
            motor.move();
        }
    }
    S_Door Open
    S_Motor Move
  • は、製造者別にファクトリクラスを定義し、製造者別に部品オブジェクトを作成するプロセスを簡略化します.
  • が新規製造業者の部品をサポートする場合は、その製造業者部品を作成するファクトリクラスを再作成するだけでよい.

    メリットとデメリット

  • の利点
  • 特定のファクトリのクラスは、アプリケーションに一度しか現れないため、アプリケーションが使用する特定のファクトリを変更しやすい.また、特定の工場を変更することで、アプリケーションは異なる製品を使用することができます.
  • 抽象ファクトリモードを使用して、アプリケーションが作成するオブジェクトのクラスを制御します.
  • です.これは、複数の関連オブジェクトを一貫した方法で作成するのに役立ちます.
  • の欠点
  • 新しく生成された製品は抽象工場で生成可能な製品集合にのみ固定されているため,新しいタイプの製品を提供することは困難である.
  • 関連項目:
  • 「設計Pattern」抽象ファクトリモデルは次のとおりです。
  • [設計モード]抽象ファクトリモード