ビルドモード

2131 ワード

JAvaのこれらの設計モードはすべてインタフェースと抽象クラスを離れられないで、やはりjavaの中でインタフェースと抽象クラスの掌握が肝心です
このbuilderモードはインタフェース/抽象クラスで構築されなければなりません
Brigerモードは、オブジェクトの属性と動作を分離し、2つの部分が独立して変化するようにするモードです.このbuilderモードは、複雑なオブジェクトのコンポーネントの構築と複雑なオブジェクト自体の構築プロセスを分離するためのモードで、複雑なオブジェクトのサブコンポーネントの構築と複雑なオブジェクト自体の構築が独立して変化することができます.
その鍵はサブオブジェクトの構築方法がbuilderによってインタフェースとそのインタフェースの実装クラスに委任され、このようなクラスの構築方法が動的であることである.
次に、外部の管理クラスでこのインタフェースオブジェクトを呼び出し、サブコンポーネントの初期化シーケンスを手動で呼び出して、複雑なオブジェクト自体の構造シーケンスを制御します.
umlクラス図
[img]http://images.cnblogs.com/cnblogs_com/zhenyulu/Pic53.gif[/img]

エンジンとレーダーを含む宇宙船のオブジェクトを構築します.この2つのコンポーネントは集約関係です.


public class SpaceShip {
private Engine engine;//

private Raid radar;//


public void setEngine(Engine engine) {
this.engine = engine;
}



public void setRaid(Raid raid) {
this.raid = raid;
}
}


レーダーとエンジンの方法を実現するインターフェースを構築し、船全体を得る方法もある.

public interface Builder {

void buildEngine();

void buildRaid();

SpaceShip getShip();

}


ビルダーを実装するサブクラス

public class BuilderImpl implements Builder {

private SpaceShip ship;

public void buildEngine() {
ship.setEngine(new Engine());

}

public void buildRaid() {
ship.setRadar(new Raid());

}

public SpaceShip getShip() {
// TODO Auto-generated method stub
return this.ship;
}
}

サブ部品の構造順序を担当する管理クラス

public class Director {
public Director(Builder builder){
builder.buildEngine();
builder.buildRaid();
}
}



がいぶよびだし

Builder builder = new BuilderImpl();//
Director d = new Director(builder);//

SpaceShip ship = builder.getShip();//


これによりshipオブジェクトを構築する際にパイプコンポーネントがどのように構築されているかを調整することはできません.また、必要に応じてサブコンポーネントの構築方法を動的に変更することができます.builderインタフェースを異なる実装オブジェクトに向けるだけでいいです.