1。ビルダーモデルの概念
定義:複雑なオブジェクト構造を表現から分離して、同じ構造プロセスが異なる表現を作成できるようにします。
コア:個別の構造と表現、さまざまな表現は、構築時の抽象的な工場モデルとは異なります。
(1)複雑なオブジェクトを作成できるため、抽象的な工場パターンに似ています。主な違いは、ビルダーモデルが複雑なオブジェクトを段階的に構築し、パーツタイプとアセンブリプロセスの順序に焦点を当てることに焦点を当てていることです。抽象的な工場モデルは、複数の一連の製品オブジェクトに焦点を当てています(シンプルまたは複雑)。ビルダーパターンは、最後のステップで製品を返し、抽象工場の場合、製品はすぐに戻ります。
(2)ビルダーモードでは、ビルダーを管理するスーパーバイザーがいます。ユーザーはスーパーバイザーに連絡し、スーパーバイザーはビルダーに連絡し、最終的に製品を取得します。つまり、建設モデルは段階的な建設プロセスを強制することができます。
2。その役割
(1)抽象ビルダーの役割:この役割は、製品のさまざまなコンポーネントを調節し、それを抽象化するために使用されます。これは、一般にアプリケーションのロジックとは無関係です。
(2)コンクリートビルダーの役割:
この役割は、抽象ビルダーで定義されているすべての方法を実装し、組み込み製品インスタンスを返します。
(3)製品(製品)の役割:
この役割は、構造における複雑なオブジェクトであり、システムには複数の製品カテゴリがあります。これらの製品には必ずしも公共インターフェイスがあり、完全に無関係になる可能性があります。
(4)ディレクターの役割:
キャラクターは、既存のモジュールの順序を配置し、ビルダービルダーに建設を開始するように指示する責任があります。
3。例
パブリックインターフェイスビルダー{void buildparta(); void buildpartb(); void buildpartc(); } Public Class BuilderimplはBuilderを実装します{@Override public void buildParta(){system.out.println( "Build Part A"); } @Override public void buildPartb(){System.out.println( "Build Part B"); } @Override public void buildPartc(){System.out.println( "Build Part C"); }} Public Class Builderimpl2はBuilder {@Override public void buildParta(){system.out.println( "Build Part AA"); } @Override public void buildPartb(){System.out.println( "Build Part BB"); } @Override public void buildPartc(){System.out.println( "Build Part CC"); }} / ** *司令官: *コンビネーションビルダーの構築方法 */パブリッククラスディレクター{private Builder Builder;パブリックディレクター(ビルダービルダー){this.builder = builder; } / ***建設方法:建設プロセスを定義します*それを実装するために他のプロセスが必要な場合、新しいコマンダーディレクター* / public void construct(){system.out.println( "ディレクターコマンドビルダーの建設"); builder.buildparta(); builder.buildpartb(); builder.buildpartc(); }} Public Class Director2 {Private Builder Builder; Public Director2(ビルダービルダー){this.builder = builder; } / ***建設方法:建設プロセスを定義します*それを実装するために他のプロセスが必要な場合、新しいコマンダーディレクター* / public void construct(){system.out.println( "director2 Commands Builder for Construction"); builder.buildpartb(); builder.buildpartc(); builder.buildparta(); }} public class test {public static void main(string [] args){builder builder = new builderimpl();ディレクターディレクター=新しいディレクター(ビルダー); / * *同じ構造プロセス、異なるモジュール(BuildParta、BuildPartB、BuildPartc)実装、新しい1つのビルダー実装 *異なる建設プロセス、新しいディレクター *異なる建設プロセス、異なるモジュール実装、新しいディレクター、新しいビルダー */ Director.construct(); System.out.println( ""); Builder builder2 = new Builderimpl2();ディレクターディレクター2 =新しいディレクター(Builder2); director2.construct(); System.out.println( "");ビルダーbuild3 = new Builderimpl2(); Director2 Director3 = new Director2(builder3); director3.construct(); }}印刷:
建設建設部品のディレクターコマンドビルダー建設部品b建設部品Cディレクターコマンドビルダー建設部品AA建設部品BB建設部品CCディレクター2建設部品BB建設部品CC建設部品AA
4.利点と短所(1)利点:
A.製品の内部表現を変更できます。
B.建物と代表的なコードをカプセル化します。
C.建設プロセスを超えたステップを制御します。
(2)短所:
A.個別に具体的にビルダーにさまざまな種類の製品を作成する必要があります。
5。使用シナリオ:
(1)複雑なオブジェクトを作成するためのアルゴリズムが、オブジェクトのコンポーネントとそれらの組み立て方法から独立している場合。
(2)構築プロセスで構築されたオブジェクトが異なる表現を持つことを許可する必要がある場合(同じ方法、異なる実行順序、および異なる結果が生成されます)。