設計モードシリーズ-抽象ファクトリモード

3029 ワード

JAVAデザインモデルシリーズ:
  • 単例モード
  • オブザーバモード
  • テンプレートメソッドモード
  • 単純ファクトリモード
  • 抽象工場モード
  • 抽象ファクトリモード
    定義#テイギ#
    抽象ファクトリモードは、スーパーファクトリを中心に他のファクトリを作成します.このスーパー工場は他の工場の工場とも呼ばれている.抽象ファクトリでは、インタフェースは関連オブジェクトを作成するファクトリであり、指定したクラスを表示する必要はありません.オブジェクトの作成に最適な方法を提供します.
    ロール#ロール#
  • 抽象ファクトリクラス:特定のファクトリが実装または継承しなければならない親クラスであり、Javaで抽象クラスまたはインタフェースで実装することができる.
  • 特定のファクトリクラス:特定のオブジェクトを作成するクラスで、特定のビジネスロジックが含まれます.
  • 抽象プロダクトクラス:ファクトリクラスによって作成されたオブジェクトインスタンスの親.
  • 特定の製品クラス:ファクトリクラスによって作成された特定のオブジェクトインスタンス.

  • インプリメンテーション
    ここでは抽象ファクトリモードを実現するための例を簡単に書きます.
    クラス図
  • このクラス図は抽象的な製品クラスと特定の製品クラスとの関係を記述しており、図から私たちはそれぞれIOrangeIAppleの2つのインタフェースを持っており、各インタフェースには2つの具体的な実装クラスCNOrangeUSOrangeUSAppleCNAppleが対応していることがわかります.ここでは,我々の抽象製品クラスと具体的な製品クラスを構成する.
  • このクラス図は、抽象ファクトリクラスと特定のファクトリクラスとの関係を記述する.抽象ファクトリクラスAbstractFactoryには、それぞれ2つの方法getApplegetOrangeがあり、具体的なファクトリクラスCNFactoryUSFactoryに渡して具体的な論理を実現する.

  • 抽象製品クラス
    public interface IApple {
    
        void get();
    }
    
    public interface IOrange {
    
        void get();
    }
    

    具体的な製品類
    public class CNApple implements IApple {
    
        public void get() {
            System.out.println("      。");
        }
    }
    
    public class CNOrange implements IOrange {
    
        public void get() {
            System.out.println("      。");
        }
    }
    
    public class USApple implements IApple {
    
        public void get() {
            System.out.println("      。");
        }
    }
    
    public class USOrange implements IOrange {
    
        public void get() {
            System.out.println("      。");
        }
    }
    

    4つの特定のオブジェクトインスタンスクラスが定義されています.
    抽象ファクトリクラス
    public interface AbstractFactory {
    
        IApple getApple();
    
        IOrange getOrange();
    }
    
    

    具体的な工場類
    public class USFactory implements AbstractFactory {
    
        public IApple getApple() {
            return new USApple();
        }
    
        public IOrange getOrange() {
            return new USOrange();
        }
    
    }
    
    public class CNFactory implements AbstractFactory {
        public IApple getApple() {
            return new CNApple();
        }
    
        public IOrange getOrange() {
            return new CNOrange();
        }
    }
    

    テスト
        public static void main(String[] args) {
                AbstractFactory usFactory = new USFactory();
        
                AbstractFactory cnFactory = new CNFactory();
        
                usFactory.getApple().get();
                usFactory.getOrange().get();
        
                cnFactory.getApple().get();
                cnFactory.getOrange().get();
    
        }
    

    実行結果:
          。
          。
          。
          。
    

    まとめ
  • の利点:一連のプロダクトファミリーを統合して作成できます.
  • の欠点:製品ファミリーで新しい製品を拡張することは困難であり、抽象工場のインタフェースを修正する必要がある.

  • JAVAデザインモデルシリーズ:
  • 単例モード
  • オブザーバモード
  • テンプレートメソッドモード
  • 単純ファクトリモード
  • 抽象工場モード