Javaにおける23のデザインパターン【創造型パターン】の【構築者パターン】
文書ディレクトリ設計モード分類 ビルダーモード コード
デザインパターン分類作成モード 単例モード、工場モード、抽象工場モード、建設者モード、プロトタイプモード 注目オブジェクトの作成プロセス 構造型モード アダプタモード、ブリッジモード、装飾モード、コンビネーションモード、外観モード、メタモード、プロキシモード 注目オブジェクトとクラスの組織 動作モード テンプレートメソッドモード、コマンドモード、反復器モード、オブザーバモード、仲介モード、メモモード、解釈器モード、ステータスモード、ポリシーモード、責任チェーンモード、訪問者モード .システムとオブジェクトとの相互作用に注目し、システムの実行時オブジェクト間の相互通信と協力を研究し、オブジェクトの職責 をさらに明確にする.
コンストラクタモードシーン: 複雑な製品を構築します.例えば、神州の宇宙船、Iphone.この複雑な製品の作成には、次のような問題があります. これらのサブアセンブリを組み立てるにはステップの問題がありますか?
の実際の開発では,我々が必要とするオブジェクトを構築する際にも非常に複雑であり,処理する必要があるステップが多い.
建造モデルの本質: は、オブジェクトサブアセンブリの個別の構造(Builderが担当)とアセンブリ(Directorが担当)を分離します.これにより、複雑なオブジェクトを構築できます.このモードは、オブジェクトの構築プロセスが複雑な場合に使用できます. は、構築およびアセンブリのデカップリングが実現されたためである.異なるコンストラクタ、同じアセンブリ、異なるオブジェクトを作成することもできます.同じコンストラクタでは、異なるアセンブリ順序で異なるオブジェクトを作成することもできます.すなわち,構造アルゴリズム,アセンブリアルゴリズムのデカップリングを実現し,より良い多重化 を実現した.
開発中のアプリケーションシーン StringBuilderクラスのappendメソッド SQLのPreparedStatement JDOM中、Dombuilder、SAXBbuilder
コード#コード#
宇宙船の建造を例にとると宇宙船には、(AirShip) エンジン 脱出タワー(EscapeTower) 軌道室(OrbitalModule) 建造宇宙船部品インタフェース(AirShipBuilder) 組立宇宙船インターフェース(AirShipDirector) 建造部品実装類(MyAirShipBuilder)と組立宇宙船実装類(MyAirShipDirector) クライアント(呼び出し元)を介して が呼び出される.部品 宇宙船及び部品、及び宇宙船を追加する各種方法 構築インターフェースおよび組立インターフェース 建造実装クラスと組立実装クラス 呼び出し者(クライアント)クラス
デザインパターン分類
コンストラクタモード
コード#コード#
宇宙船の建造を例にとると
//
public class Engine {
private String name;
public Engine(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// ————————————————————————————————————————————————————————
public class OrbitalModule{
private String name;
public OrbitalModule(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// ——————————————————————————————————————————————————————————
public class EscapeTower {
private String name;
public EscapeTower(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package builder;
/**
*
* @author Drk
*
*/
public class AirShip {
private OrbitalModule orbitalModule;//
private Engine engine;//
private EscapeTower escapeTower;//
public void launch() {
System.out.println(" ");
}
public OrbitalModule getOrbitalModule() {
return orbitalModule;
}
public void setOrbitalModule(OrbitalModule orbitalModule) {
this.orbitalModule = orbitalModule;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public EscapeTower getEscapeTower() {
return escapeTower;
}
public void setEscapeTower(EscapeTower escapeTower) {
this.escapeTower = escapeTower;
}
}
//
public interface AirShipBuilder {
Engine builderEngine();
OrbitalModule builderOrbitalModule();
EscapeTower builderEscapeTower();
}
//
public interface AirShipDirector {
/**
*
* @return
*/
AirShip directAirShip();
}
//
public class MyAirShipBuilder implements AirShipBuilder{
@Override
public Engine builderEngine() {
System.out.println(" ");
return new Engine(" ");
}
@Override
public OrbitalModule builderOrbitalModule() {
System.out.println(" ");
return new OrbitalModule(" ");
}
@Override
public EscapeTower builderEscapeTower() {
System.out.println(" ");
return new EscapeTower(" ");
}
}
//
package builder;
public class MyAirshipDirector implements AirShipDirector{
private AirShipBuilder builder;//
public MyAirshipDirector(AirShipBuilder builder) {
super();
this.builder = builder;
}
@Override
public AirShip directAirShip() {
//
Engine e = builder.builderEngine();//
OrbitalModule o = builder.builderOrbitalModule();//
EscapeTower et = builder.builderEscapeTower();//
//
AirShip ship = new AirShip();//
ship.setEngine(e);//
ship.setEscapeTower(et);//
ship.setOrbitalModule(o);//
return ship;//
}
}
package builder;
public class Client {
public static void main(String[] args) {
AirShipDirector director = new MyAirshipDirector(new MyAirShipBuilder());
AirShip ship = director.directAirShip();
System.out.println(ship.getEngine().getName());
ship.launch();
}
}
// ————————————————————————————————————