建造者模式屬於建立型設計模式,我們經常需要建立一些物件,這個物件是由一些基本的部分組成的,但是考慮到各種情況,這些具體的部分會經常的發生改變,但是組織這些部件的順序等等是不容易的變化的,這點類似乎模板方法模式遇到的使用場景,模板方法側重點在於定義乙個基本的演算法骨架,建造者模式側重點在於靈活的變更具體部件的實現。類圖如下:
有三個角色需要解釋:
1.director類(導演類):維護乙個builder物件獲取這些元件,這裡定義組裝順序等等操作。不設計這些具體部件的實現。
2.builder類(建立者):定義需要建立的元件的抽象方法。
3.concretebuilder (具體的建立者):生產具體的部件實現。
接下來我就來舉個建造者的例子:
// 需要構建的物件car
class car
public void setwheel(string wheel)
public string getengine()
public void setengine(string engine)
public string getbrand()
public void setbrand(string brand)
@override
public string tostring()
}// 建造車的介面
abstract class buildcar
// 建造者具體的實現類bmwbuild
class bmwbuild extends buildcar
@override
string getengine()
@override
string getbrand()
}// 建造者具體的實現類benzbuild
class benzbuild extends buildcar
@override
string getengine()
@override
string getbrand()
}// 導演類,負責組裝這些零部件的順序等等工作
class factory
*/// 定義順序
public car finishcar()
public buildcar getbuilder()
// 設定具體的建造者
public void setbuilder(buildcar builder)
}測試:
factory factory = new factory();
factory.setbuilder(new bmwbuild());
car car = factory.finishcar();
system.out.println(car);
factory.setbuilder(new benzbuild());
car = factory.finishcar();
system.out.println(car);
執行結果:
car [wheel=bmw wheel, engine=bmw engine, brand=bmw]
car [wheel=banz wheel, engine=benz engine, brand=benz brand]
我們如果有的新的具體元件的實現類,只需要增加新的類去整合實現build即可。director的組裝順序不需要改變,而且也不用改動原有的邏輯,符合開閉原則,也符合黎克特制替換原則。
設計模式之建造者模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟 設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設 計模式 和...
設計模式之建造者模式
建造者模式也叫生成器模式,是一種物件建立型模式,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承或過載的方式,動態的建立具有復合屬性的物件。應用場景 物件的建立 builder 模式是為物件的建立而設計的模式 建立的是乙個復合物件 被建立的物件為乙個具有復合屬性的復合物件 關...
設計模式之建造者模式
在做服務介面的時候,往往在業務處理之前需要做業務校驗,格式校驗等業務前處理。這些介面有個相同的特徵,就是必須經過這些處理步驟之後才能做核心的業務處理,拓展的服務介面也必須經過這些處理。基於這個特徵,我們就來分析一下設計模式中,建造者模式。我們先建乙個基礎的服務類 public abstract cl...