ビルダーモード
4373 ワード
例:
/**作者:wanglei メールボックス:[email protected] ビルダーモード 定義: 1.複雑なオブジェクトのコンストラクションをその表現から分離することで、同じコンストラクションプロセスで異なる表現 を作成することができる.主な役割: 1.複雑なオブジェクト は、ユーザがオブジェクトの構築プロセスおよび詳細を知らない場合に直接作成することができる. 2.ユーザーは、複雑なオブジェクトのタイプと内容を指定するだけです. 3.コンストラクタモードは、複雑なオブジェクトを順番に作成する(内部のコンストラクタと詳細を隠す) を担当します.で解決された問題: 1.複雑なオブジェクトの作成を容易にする(インプリメンテーションプロセスを知らなくてもよい) 2.コード多重性&カプセル化(オブジェクト構築プロセスと詳細をカプセル化&多重化) モード説明: 指揮者(Director)は直接顧客(Client)と需要コミュニケーションを行う. コミュニケーション後、指揮者は顧客が製品を作成する需要を各部品の建造要求(Builder)に分けた. は各部品の建造要求を具体的な建造者(ConcreteBuilder)に委任する. 各具体的な建設者は製品部品の構築を担当する. は最終的に特定の製品(Product)として構築される. 例説明: 背景:小成はコンピュータシティに行って組み立てたデスクトップホスト を買いたいと思っています.プロセス: コンピュータシティのオーナー(Diretor)と小成(Client)は需要の疎通を行います(買ってゲームをしますか?勉強しますか?映画を見ますか?) 需要を理解した後、コンピュータシティのボスは小成需要のホストを各部品(Builder)の建造要求(CPU、マザーボードblabla) に分けた.は組立人員(ConcreteBuilder)を指揮してコンポーネントを構築する. コンポーネントを小成に組み立てるために必要なコンピュータ(Product)*/public class SimpleFactoryPattern{public static void main(String[]args){//同店のオーナーとインストーラのDirector director=new Director();Builder Builder=new ConcreteBuilder();//需要を疎通した後、オーナーはインストーラを呼んでコンピュータdirector.construct(Builder)をインストールする;//組み立てが完了すると、組み立てたパソコンComputer computer=Builder.GetComputer();//組立員はコンピューターを展示して小成にcomputerを見せる.show(); } }
/***結果: CPU OK Mainboard OK HD OK パソコンの組み立てが完了しました. を検収してください.の利点: 1.デカップリングが容易で、製品自体と製品作成プロセスをデカップリングし、同じ作成プロセスを使用して異なる製品を得ることができます.つまり細部は抽象に依存する. 2.オブジェクトの作成を正確に制御することが容易であり、複雑な製品の作成手順を異なる方法に分解することで、作成プロセスをより明確にすることができる. 3.新しい特定のコンストラクタを拡張しやすく追加既存のクラスライブラリのコードを変更する必要がなく、拡張しやすく、「開閉原則」に合致します. 欠点: 1.コンストラクタモデルによって作成された製品は一般的に多くの共通点を持ち、その構成部分は似ている.製品間の差異が大きい場合は、コンストラクタ・モードを使用するのに適していないため、使用範囲が制限されています. 2.製品の内部変化が複雑である場合、このような変化を実現するために多くの具体的なコンストラクタクラスを定義する必要があり、システムが膨大になる可能性があります. 適用シーン: 1.生成する必要がある製品オブジェクトには複雑な内部構造があり、これらの製品オブジェクトは共通性を備えている. 2.複雑なオブジェクトの作成と使用を分離し、同じ作成プロセスで異なる製品を作成できるようにします.*/
/**
* :wanglei
* :[email protected]
*
* ( (Builder): )
*/
public abstract class Builder {
/**
* : CPU ,
*/
public abstract void BuildCPU();
/**
* : ,
*/
public abstract void BuildMainboard();
/**
* : ,
*/
public abstract void BuildHD();
/**
* @return :
*/
public abstract Computer GetComputer();
}
import java.util.ArrayList;
import java.util.List;
/**
* :wanglei
* :[email protected]
*
* (Product):
*/
public class Computer {
/**
*
*/
private List parts = new ArrayList();
/**
*
*/
public void Add(String part){
parts.add(part);
}
public void show(){
for(String args : parts){
System.out.println(args+" OK");
}
System.out.println(" , ");
}
}
/**
* :wanglei
* :[email protected]
*
* (ConcreteBuilder):
*
*/
public class ConcreteBuilder extends Builder{
/**
*
*/
Computer computer = new Computer();
@Override
public void BuildCPU() {
computer.Add("CPU");
}
@Override
public void BuildMainboard() {
computer.Add("Mainboard");
}
@Override
public void BuildHD() {
computer.Add("HD");
}
/**
* @return
*/
@Override
public Computer GetComputer() {
return computer;
}
}
/**
* :wanglei
* :[email protected]
*
* (Director)
*
*/
public class Director {
/**
* @param builder
*/
public void Construct(Builder builder){
builder.BuildCPU();
builder.BuildMainboard();
builder.BuildHD();
}
}
/**
/***