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

2454 ワード

簡単に言えば,抽象ファクトリはファクトリを生成する構造を提供し,具体的に生成されたインスタンスは生成されたファクトリによって決定される.抽象ファクトリモードでは、クライアントが製品の特定の状況を指定する必要がなく、複数の製品ファミリー内の製品オブジェクトを作成するインタフェースをクライアントに提供できます.工場方法モデルは製品等級構造を対象としている.抽象工場モデルは複数の製品等級構造を対象としている.
一般的には、次の4つのセクションがあります.
  • 1抽象工場:工場メソッドモデルの核心であり、具体的な論理とは無関係である.
  • 2具体的な工場:実際に各種の実例の発生を担当する
  • 3抽象製品:同じ種類の製品の抽象インタフェース
  • 4具体的な製品:真の各種製品の例
  • 1.製品インタフェースの作成
    public interface AbstractProductA {
        void fun();
    }
    
    public interface AbstractProductB {
        void fun();
    }
    

    2.特定の製品の作成
    public class ProductA1 implements AbstractProductA{
        @Override
        public void fun() {
            System.out.println("ProductA1 fun()");
        }
    }
    
    public class ProductA2 implements AbstractProductA{
        @Override
        public void fun() {
            System.out.println("ProductA2 fun()");
        }
    }
    
    public class ProductB1 implements AbstractProductB{
        @Override
        public void fun() {
            System.out.println("ProductB1 fun()");
        }
    }
    
    public class ProductB2 implements AbstractProductB{
        @Override
        public void fun() {
            System.out.println("ProductB2 fun()");
        }
    }
    

    3.ファクトリインタフェースの作成
    interface AbstractFactory {
        AbstractProductA createProductA();
    
        AbstractProductB createProductB();
    }
    

    4.実績工場の作成
    public class Factory1 implements AbstractFactory{
        @Override
        public AbstractProductA createProductA() {
            return new ProductA1();
        }
    
        @Override
        public AbstractProductB createProductB() {
            return new ProductB1();
        }
    }
    
    public class Factory2 implements AbstractFactory{
        @Override
        public AbstractProductA createProductA() {
            return new ProductA2();
        }
    
        @Override
        public AbstractProductB createProductB() {
            return new ProductB2();
        }
    }
    

    5.工場管理類
    public class FactoryCreater {
        public static AbstractFactory getFactory(String type){
            switch (type){
                case "1":
                    return new Factory1();
                case "2":
                    return new Factory2();
                default:
                    return null;
            }
        }
    }
    

    6.テストクラス
    public class test {
        public static void main(String[] args) {
            AbstractFactory factory = FactoryCreater.getFactory("1");
            factory.createProductA().fun();
        }
    }