まず、モデルビルダーの定義と特性
ビルダー(ビルダー)モードの定義:同じ構成プロセスは、設計パターンはBuilderパターンと呼ばれ、異なる表現を作成することができるように、複雑なオブジェクトとその表現分離の構造を指します。ビルダーパターンに属する创建型
デザインパターンは、複雑なオブジェクトを構築する工程で単純なオブジェクトのステップの複数を使用して、単純な複数のオブジェクトに複雑なオブジェクトです。これは、製品の一部は同じですが、各部分が選択の柔軟性であること、変装単離されていないになります。
次のようにこのモードの主な利点は次のとおりです。
- それぞれの具体的なビルダーが独立している、それはシステムの拡張を助長しています。
- クライアントは、リスクの詳細を制御しやすく、製品の内部構成の詳細を知る必要はありません。
次のような欠点は次のとおりです。
- 製品の一部は、その使用が制限され、同じでなければなりません。
- 製品の複雑における内部変化した場合、モデルがたくさんにビルダーのカテゴリが増加します。
フォーカスビルダー(ビルダー)モードとファクトリパターン異なる:ビルダーモデルは部品の組立工程に着目し、部品を作成するプロセスにFactory Methodパターン支払うもっと注意を、しかし、両方を組み合わせることができます。
第二に、作成者モードの構造と実装
ビルダー(ビルダー)モードでは、製品、抽象ビルダー、コンクリートビルダー、指揮官の4つの要素で構成され、そして今、私たちは基本的な構造と実装を分析する必要があります。
1.構造モデル
ビルダー(ビルダー)モードの主な役割は次の通りです。
- 製品の役割(製品):これは、複数のコンポーネントが含まれている複雑なオブジェクトであり、特にビルダーによって、そのさまざまなコンポーネントを作成するオフ。
- 抽象ビルダー(ビルダー):これは抽象メソッドであり、典型的には、複雑な製品の処理に戻るのgetResult()を含む、製品インタフェースの様々なサブコンポーネントを作成することを含みます。
- 特定ビルダー(コンクリートビルダ):インタフェースビルダー実現は、複雑な製品の様々な構成要素を作成する具体的な方法を達成します。
- ディレクター(監督):それは、複雑なオブジェクトを作成するオブジェクトビルダ部構造およびアセンブリのメソッドを呼び出し、誰がコマンドで特定の製品を伴わなかったこと。
コードは以下の通りであります:
製品ライン、複雑なオブジェクトA、B、Cの複数の成分を含みます。
クラスの製品 { プライベート文字列partA。 プライベート文字列partB。 プライベート文字列partC。 公共 ボイドsetPartA(文字列partA) { この .partA = partA。 } 公共 ボイドsetPartB(文字列partB) { この .partB = partB。 } 公共 ボイドsetPartC(文字列partC) { この .partC = partC。 } 公共 ボイドショー() { // 显示产品的特性 } }
要約ビルダー:抽象メソッドさまざまなサブコンポーネントが含まれている製品を作成します。
抽象 クラスビルダは { // 製品を作成したオブジェクト 保護プロダクト製品= 新新;製品() 公共の 抽象 無効buildPartA(); 公共の 抽象 無効buildPartB(); 公共の 抽象 無効buildPartC(); //は、製品のオブジェクトを返す パブリック製品のgetResultを() { 返す製品を; } }
具体的なビルダー:ビルダーは、抽象インタフェースを実現します。
パブリック クラス ConcreteBuilderが延びビルダー { 公共 ボイドbuildPartA() { product.setPartA( "建造PartA" )。 } 公共 ボイドbuildPartB() { product.setPartA( "建造PartB" )。 } 公共 ボイドbuildPartC() { product.setPartA( "建造PartC" )。 } }
司令官:メソッド呼び出しは、複雑なオブジェクトを作成するためのビルダーを終了しました。
クラスディレクター { プライベートビルダービルダー; 公共ディレクター(ビルダービルダー) { この .builder = ビルダー; } // 产品构建与组装方法 パブリック製品コンストラクト() { builder.buildPartA()。 builder.buildPartB(); builder.buildPartC(); リターンbuilder.getResult(); } }
お客様のカテゴリ:
パブリック クラスクライアント { 公共 静的 ボイドメイン(文字列[]引数) { ビルダービルダー = 新しいConcreteBuilder()。 ディレクターディレクター = 新しいディレクター(ビルダー)。 製品産物 = director.construct()。 product.show(); } }
シーン三つのアプリケーション、モード
ビルダー(ビルダー)モードでは、自社製品のさまざまな部分がしばしば劇的な変化に直面している、複雑なオブジェクトを作成するには、それは多くの場合、以下の状況で使用されているので、それらを組み合わせたアルゴリズムは、比較的安定しています。
- 複数の部材から構成されるより複雑なオブジェクトを作成し、複雑な変化に直面して、各メンバーが、構成の順序は、メンバー間安定です。
- 複雑なオブジェクトをオブジェクトとその組立方法、すなわち、アルゴリズムの独立したコンポーネントを作成、構築プロセスおよび最終生成物は、独立した表現です。
拡張4つのモード
アプリケーションプロセスで必要とされるビルダー(ビルダー)モードでは、製品カテゴリは一つだけ、一つだけ特定のビルダーを作成した場合、その後、あなたは抽象的なビルダーを省略することができ、さらには省略司令官の役割から、変更することができます。当然の組み合わせ:
パブリック クラスコース{ プライベート文字列courseName。 プライベート文字列coursePPT。 プライベート文字列courseVideo。 プライベート文字列courseArticle。 パブリックコース(CourseBuilder courseBuilder){ この .courseName = courseBuilder.courseName。 この .coursePPT = courseBuilder.coursePPT。 この .courseVideo = courseBuilder.courseVideo。 この .courseArticle = courseBuilder.courseArticle。 } @Override パブリック文字列のtoString(){ リターン"コース{" + "courseName = '" + courseName + '\'' + "coursePPT = '" + coursePPT + '\'' + "courseVideo = '" + courseVideo + '\'' + "、courseArticle = '」+ courseArticle + '\'' + '}' ; } パブリック 静的 クラスCourseBuilder { プライベート文字列courseName。 プライベート文字列coursePPT。 プライベート文字列courseVideo。 プライベート文字列courseArticle。 コース名; 返す これを。 } 公共CourseBuilder buildCoursePPT(文字列coursePPT){ この .coursePPT = coursePPT。 返す これを。 } 公共CourseBuilder buildCourseVideo(文字列courseVideo){ この .courseVideo = courseVideo。 返す これを。 } 公共CourseBuilder buildCourseArticle(文字列courseArticle){ この .courseArticle = courseArticle。 返す これを。 } パブリックコースビルド(){ 返す 新しいコース(これを)。 } } }
使用します。
パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ コース、コース = 新しい新しいCourse.CourseBuilder() .buildCourseName(「デザインJavaモード」) .buildCoursePPT(「JavaのデザインパターンPPT」) .buildCourseVideo(「Javaのデザインパターンビデオ" ) .buildCourseArticle( " Javaのデザインパターン紙」).build(); コースのSystem.out.println(); } }