ビルダーパトロール


同じ建設プロセスが異なる表現をつくることができるように、複雑なオブジェクトの構造をその表現から切り離してください.

参加者

  • Builder:製品オブジェクト
  • の部品を作成するための抽象インターフェースを指定する
  • ConcreteBuilder :ビルダーインターフェイスを実装することで、製品の一部を構成し、組み立てます.作成した表現を定義し続けます.製品を取得するインターフェイスを提供します.
  • ディレクター:ビルダーインタフェース
  • を使用しているオブジェクトを建設する
  • 製品:建設中の複雑なオブジェクトを表します.ConcreteBuilderは、製品の内部表現を構築し、それが組み立てられるプロセスを定義します.部品を最終的な結果に組み立てるためのインターフェースを含む構成部品を定義するクラスを含みます.
  • コード


    public class Main {
    
        public static void main(String[] args) {
            Director director = new Director();
    
            Builder b1 = new ConcreteBuilder1();
            Builder b2 = new ConcreteBuilder2();
    
            director.construct(b1);
            Product p1 = b1.getResult();
            p1.show();
    
            director.construct(b2);
            Product p2 = b2.getResult();
            p2.show();
        }
    }
    
    public class Director {
    
        public void construct(Builder builder) {
            builder.buildPartA();
            builder.buildPartB();
        }
    }
    
    public interface Builder {
    
        Product getResult();
    
        void buildPartA();
    
        void buildPartB();
    }
    
    public class ConcreteBuilder1 implements Builder {
    
        private Product product = new Product();
    
        @Override
        public Product getResult() {
            return product;
        }
    
        @Override
        public void buildPartA() {
            product.add("PartA");
        }
    
        @Override
        public void buildPartB() {
            product.add("PartB");
        }
    }
    
    public class ConcreteBuilder2 implements Builder {
    
        private Product product = new Product();
    
        @Override
        public Product getResult() {
            return product;
        }
    
        @Override
        public void buildPartA() {
            product.add("PartX");
        }
    
        @Override
        public void buildPartB() {
            product.add("PartY");
        }
    }
    
    public class Product {
    
        private List<String> parts = new ArrayList<>();
    
        public void show() {
            System.out.println("\nProduct Parts -------");
            for (String part : parts) {
                System.out.println(part);
            }
        }
    
        public void add(String part) {
            parts.add(part);
        }
    }
    

    出力


    Product Parts -------
    PartA
    PartB
    
    Product Parts -------
    PartX
    PartY
    
    

    エディエルジュリアン61 / デザインパターン