起源のビルダーモード
住宅の建設は、いくつかの部分で構成され、各部分を変化させることが、あなたがゲームの家ハウスの施設を作成したとします。
あなたが最も直感的な設計法を使用している場合は、家のあらゆる部分を変更する、それが構築された住宅を再修正するつながる......
モチベーション(動機)
ソフトウェアシステムにおいて、時々それは通常、特定のアルゴリズムでサブオブジェクトの様々な部分から成る作業を作成するために、「複合オブジェクト」直面、需要の変化に、この複雑な主題の様々な部分は、しばしば劇的な変化に直面し、しかし、それらを組み合わせたアルゴリズムは比較的安定しています。
この変化に対応するには?どのように「パッケージ機構」ことにより、ニーズの変化に応じて変化していない「安定した構造アルゴリズム」のシステムを維持し、「複雑なオブジェクトのさまざまな部分」の変化を分離するために提供するには?
テント(意図)
同じビルドプロセスは、複雑なオブジェクトの異なる表現を作成することができるよう構成は、相分離を表します。 - 「デザインパターン」のGoF
構造(構造)
コラボレーション(コラボレーション)
アプリケーション
Builderは、それが東西軸の単なる定義ですが、壁がどのように見えるか、それは具体的なドアのようなものだった気にしないでください。
パブリック 抽象 クラスハウス { } パブリック 抽象 クラスビルダ { パブリック 抽象 無効BuildDoor(); 公共の 抽象 無効BuildWall(); パブリック 抽象ハウスGetHouse(); }
相対的な変化のシステム部分ConcreteBuilder:
パブリック クラスRomanHouse:ハウス { } パブリック クラスRomanHouseBuilder:ビルダー { 公共 オーバーライド 無効BuildDoor() { スロー 新しい(例外を「メソッドまたは操作が実装されていません」); } パブリック オーバーライド ボイドBuildWall() { スロー 新しい(例外「メソッドまたは操作が実装されていません。」)。 } 公共 オーバーライドハウスGetHouse() { リターン 新しいRomanHouse(); }
}
//他のビルダー
システムは、取締役:(クライアントの比較的安定した部分)であります
ディレクターと抽象クラスビルダはタイト結合したが、その中の任意の特定のConcreteBuilderの情報がないです。ConcreteBuilderが変更されたときには、取締役は、特定の変更に依存することなくなり、ディレクターは変更されません。
パブリック クラスGameManager { 公共の 静的ハウスCreatHouse(ビルダービルダー) { builder.BuildDoor(); builder.BuildWall(); 返すbuilder.GetHouseを(); } }
クライアントプログラム:
プライベート 静的 ボイドメイン(文字列[]引数) { 文字列のAssemblyName =にConfigurationSettings [ " BuilderAssebmly " ]。 文字列 builderName =にConfigurationSettings [ " BuilderClass " ]。 アセンブリアセンブリ = Assembly.Load(のAssemblyName)。 型t = assembly.GetType(" builderName " )。 ビルダービルダー = Activator.CreateInstance(T)などのビルダー; ハウスH = GameManager.CreatHouse(ビルダー)。 }
いくつかのポイントモデルビルダー
ビルダーモードは、のために主に使用されている「複雑なオブジェクトを構築するためのステップバイステップ。」このつの「ステップバイステップ」で安定したアルゴリズム(上記の例GameManagerのようすなわちディレクター)、及び各部分(即ちConcreteBuilder)複合オブジェクトは常に変化しています。
主に頻繁な需要の「複雑なオブジェクトの様々な部分」の変化に応答して--Builderカプセル化モードポイントの変化がどこです。欠点は、「ステップステップビルドアルゴリズムによる」需要の変化に対応することは困難であるということです。(あなたが頻繁に変更すると、住宅建設など、その後、Builderパターンは意味がありません)
「シリーズオブジェクト」を解決するためのAbstractFactoryモードは、ビルダーモード「ターゲット部分」のニーズの変化に対応するために、変更を必要とします。Compositeパターン・ビルダー・モードは、通常は組み合わせて使用します。
.NET FrameworkのBuilderアプリケーション
ASP.Netでは、我々はSystem.Web.UI.Pageから継承Pageクラスに記述します。実際には、ページビルダー、コンテナです。多くの方法がありますが、それは例えば、いわゆるBuilderPart()メソッド、次のとおりです。仮想メソッドをしているなどのOnInit()、読み込み時()、OnPreRender()、(レンダリング)、、、私たちは私たち自身の実装を提供するために、書き換えに行くことができます。我々は、DLLのbinフォルダにコンパイルするとき、我々は我々自身ConcreteBuilder例を生成します。使用されるシステムは、実際にページ基本クラスでした。