Java設計モードのビルダーモード


Java設計モードのビルダーモード
  • ビルダーモードの説明:Builderモードは、複雑なオブジェクトを一歩一歩作成する作成モードであり、内部構築の詳細を知らないまま、オブジェクトの構築プロセスをより細かく制御することができます.このモードは、複雑なオブジェクトを構築するプロセスと、その見えないものをデカップリングし、構築プロセスと部品表現を分離するために使用されます.コンピュータ、マザーボード、グラフィックスカード、ディスプレイ、CPU、電源、さまざまな小さな部品など、複雑なオブジェクトの多くの構成部分のため、これらの部品をどのように使用可能なコンピュータに組み立てるか、この組み立てには一定の時間がかかり、複雑で、このような状況に対して、構築過程で外部に詳細を隠すために、コンストラクタモードを使用して部品と組立プロセスを分離することで、構築プロセスと部品が自由に拡張され、両者の結合も最小限に抑えることができます. 
  • コンストラクタモードの定義:複雑なオブジェクトのコンストラクションとその表現を分離し、同じコンストラクションプロセスが異なる表現を作成できるようにします.
  • コンストラクタモードの使用シーン:3.1同じ方法、異なる実行順序、異なるイベント結果が生成された場合3.2以上の部品または部品は、1つのオブジェクトに組み立てることができますが、生成された実行結果は同じではありません.3.3プロダクトクラスが非常に複雑な場合、またはプロダクトクラスの呼び出し順序が異なる場合、コンストラクタモードを使用するのに適しています.3.4オブジェクトの初期化が非常に複雑で、パラメータが多く、多くのパラメータがデフォルト値を持っている場合.
  • 構築者モデルのUMLクラス図:役割紹介:Product製品クラス--製品の抽象クラス;Builder——抽象Builder類、規範製品の創立、一般的にサブクラスから具体的な創立過程を実現する.ConcreteBuilder--具体的なBuilderクラス;Director-統合組立プロセス
  • コンストラクタモードの簡単な実現:コンピュータの組立プロセスは複雑で、組立順序は固定されていない.理解しやすいように、コンピュータの組立プロセスをホストの構築に簡略化し、オペレーティングシステムを設定し、ディスプレイ3の各部分を設定し、Directorと具体的なBuilderを通じてコンピュータオブジェクトを構築する.次のコード:Computer.java
  • /**
           ,   Product  
     */
    public abstract class Computer {
        protected String mBoard;
        protected String mDisplay;
        protected String mOS;
    
        protected Computer(){
    
        }
        //    
        public void setmBoard(String mBoard) {
            this.mBoard = mBoard;
        }
        //     
        public void setmDisplay(String mDisplay) {
            this.mDisplay = mDisplay;
        }
        //      
        public abstract void setmOS();
    
        @Override
        public String toString() {
            return "Computer{" +
                    "mBoard='" + mBoard + '\'' +
                    ", mDisplay='" + mDisplay + '\'' +
                    ", mOS='" + mOS + '\'' +
                    '}';
        }
    }

    Windows.java
    /**
        Computer ,Windows
     */
    public class Windows extends Computer {
        protected Windows(){
    
        }
    
        @Override
        public void setmOS() {
            mOS = "Windows10";
        }
    
    }

    Builder.java
    /**
     *   Builder 
     */
    public abstract class Builder {
        //    
        public abstract void builderBoard(String borad);
        //     
        public abstract void builderDisplay(String display);
        //      
        public abstract void builderOS();
    
        //  Computer
        public abstract Computer create();
    }

    WindowsBuilder.java
    /**
     *    Builder ,WindowsBuilder
     */
    public class WindowsBuilder extends Builder {
        private Computer mComputer = new Windows();
        @Override
        public void builderBoard(String borad) {
            mComputer.setmBoard(borad);
        }
    
        @Override
        public void builderDisplay(String display) {
            mComputer.setmDisplay(display);
        }
    
        @Override
        public void builderOS() {
            mComputer.setmOS();
        }
    
        @Override
        public Computer create() {
            return mComputer;
        }
    }

    Director.java
    /**
     * Director ,    Computer
     */
    public class Director {
        Builder mBuilder;
        public Director(Builder mBuilder){
            this.mBuilder = mBuilder;
        }
    
        /**
         *     
         * @param board
         * @param display
         */
        public void construct(String board, String display){
            mBuilder.builderBoard(board);
            mBuilder.builderDisplay(display);
            mBuilder.builderOS();
        }
    }

    Test.java
    /**
     *     
     */
    public class Test {
        public static void main(String[] args) {
            //   
            Builder builder = new WindowsBuilder();
            Director pcDirector = new Director(builder);
            //      ,
            pcDirector.construct("    ","Retina   ");
            System.out.println("Computer Info : " + builder.create().toString());
        }
    }

    上記の例では、Windowsオブジェクトを特定のWindowsBuilderで構築し、Directorは複雑な製品オブジェクトを構築するプロセスをカプセル化し、構築の詳細を外部に非表示にします.BuilderはDirectorとともに複雑なオブジェクトのコンストラクションをその表現から分離し、同じコンストラクションプロセスを使用して異なるオブジェクトを作成できます.開発中にDirectorロールが省略されることが多いことに注意してください.オブジェクトの組み立てに直接Builderを使用します.このBuilderは通常チェーン呼び出しです.そのキーは、setterメソッドごとに自身、すなわちreturnthisを返すことです.これにより、setterメソッドがチェーン呼び出し可能になります.コードはほぼ次のようになります.
    new TestBuilder().setA(“A”).setB(“B”).create();
    この形式でDirectorの役割を排除するだけでなく、構造全体も簡単になり、Productオブジェクトの組み立てプロセスをより細かく制御することができます.