建造者模式(Builder),將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示(過程是穩定的)。ide
從建造者模式的定義來看,確定是一頭霧水,說的都是什麼跟什麼呀!舉個小例來理解下:當咱們來實現一個畫畫的功能,要求畫瘦的人和胖的人。畫的過程是穩定的,即:頭、胳膊、身體、腿都是必須的。而畫的具體實現是不同的,例如:頭大、肚子大、腿長等。這時再去理解建造者模式的定義就簡單多了。ui
UML圖:spa
Builder抽象類中定義各個部分的方法的抽象方法(例:定義了畫胳膊、畫頭、畫腿等方法)。
ConcreteBuilder類是各類不同具體表示,它具體實現了Builder中的方法,而且返回一個結果。(例:實現了具體畫怎樣的頭、胳膊、腿等,並返回構造的這我的)
product類是具體產品,即:要建造的產品。例:頭、胳膊、腿等都是要建造人3d
代碼:code
//抽象建造者類 public abstract class Builder { public abstract void Head(); public abstract void Body(); public abstract void Leg(); }
//具體建造者類 class ConcreteBuilderA:Builder { private Person person = new Person(); public override void Head() { //do something person.Head = "A式頭"; } public override void Body() { //do something person.Body = "A式身體"; } public override void Leg() { //do something person.Leg = "A式腿"; } public Person GetResult() { return person; } }
//具體建造者類 class ConcreteBuilderB:Builder { private Person person = new Person(); public override void Head() { //do something person.Head = "B式頭"; } public override void Body() { //do something person.Body = "B式身體"; } public override void Leg() { //do something person.Leg = "B式腿"; } public Person GetResult() { return person; }
//產品類 class Person { public Object Head { set; get; } public Object Body { set; get; } public Object Leg { set; get; } }
//指揮者類 class Director { public void Construct(Builder builder) { builder.Head(); builder.Body(); } }
執行:對象
static void Main(string[] args) { Director director = new Director(); ConcreteBuilderA a = new ConcreteBuilderA(); director.Construct(a); Object p = a.GetResult(); }
上述執行代碼中,首先建立執行者類,再建立一個具體建造者類,而後由執行者類調用Construct方法去執行建造。而最後經過具體建造者類的GetResult方法得到了建造的結果。blog