建造模式是物件的建立模式。建造模式可以將產品的內部表象與產品的生成過程分割開來,從而可以使乙個建造過程生成具有不同的內部表象的產品物件。
上古時期女媧造人,首先要新建乙個人的類,但是女媧不只可以造人,它可以創造萬物,所以,這裡定義乙個標識介面叫product(產品)
public
inte***ce
product
public
class
manimplements
product
public
void
setsoul
(string soul)
public string getearsandeyes()
public
void
setearsandeyes
(string earsandeyes)
public string getarm()
public
void
setarm
(string arm)
}
那麼想要造人需要有一定的標準和步驟,這裡定義乙個介面來規範創造的步驟(抽象的建造者):
public
inte***ce
builder
創造人的步驟是buildpart1》buildpart2》buildpart3,最後的方法是返回創造的這個人
具體的建造者
public
class
manbuilder
implements
builder
@override
public
void
buildpart2()
@override
public
void
buildpart3()
@override
public man productresult()
}
在創造人的過程中,冥冥之中有乙個指揮者,指揮者委託女媧造人
public
class
director
}
測試**
director director =
newdirector()
;//客戶端只需要跟指揮者打交道
man man =director.
makeman
(new
manbuilder()
);system.out.
println
(man.
getarm()
);system.out.
println
(man.
getearsandeyes()
);system.out.
println
(man.
getsoul()
);
上邊例子中只有乙個產品類,對應的也只有乙個具體的建造者類。如果有兩個產品的話,就應當有兩個具體的建造者類,女媧造人之後感覺人類很孤單,決定造點動物玩玩:
public
class
dogimplements
product
public
void
setleg
(string leg)
public string gethead()
public
void
sethead
(string head)
}
dog的具體建造者:
public
class
dogbuilder
implements
builder
@override
public
void
buildpart2()
@override
public
void
buildpart3()
@override
public dog productresult()
}
指揮者類相應的增加乙個方法(makedog):
public
class
director
public dog makedog
(builder builder)
}
測試:
director director =
newdirector()
; man man =director.
makeman
(new
manbuilder()
);dog dog =director.
makedog
(new
dogbuilder()
);system.out.
println
(man.
getarm()
);system.out.
println
(man.
getearsandeyes()
);system.out.
println
(man.
getsoul()
);system.out.
println
("**********====");
system.out.
println
(dog.
gethead()
);system.out.
println
(dog.
getleg()
);
本模式涉及到四個角色:
建造模式在實現時可以根據具體情況做一些變化。
首先,如果設計師確定只需要乙個具體建造者角色的話,可以省略掉抽象建造者角色,因為如果只有乙個具體建造者,就不需要什麼規範了;抽象建造者被省略掉了,還可以在省略掉指揮者:
public
class
manbuilder
public
void
buildpart2()
public
void
buildpart3()
public man productresult()
//建造產品的方法
public man makeproduct()
}
準備乙個抽象類,將部分邏輯以具體方法以及具體構造子的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。這就是模板方法模式。
有意思的是,這個特殊的建造模式與模板方法有相似之處,makeproduct就是乙個模板方法,模板方法裡邊包含的就是基本方法。
如果系統的要求發生變化、要求有不同的零件生成邏輯時,那麼有兩種選擇:一是修改這個退化的建造模式,將它改回成為完全的建造模式;二是不修改已有**,將這個manbuilder擴充套件到不同的子類,在這些子類裡面置換掉需要改變的建造方法。
第一種選擇了建造模式;第二種選擇了模板方法模式。
建立型設計模式 建造模式
program ade someproblem author cade franklin create 2019 12 22 22 20 public inte ce housebuilder 別墅 program ade someproblem author cade franklin creat...
設計模式 4 建立型之建造模式
1 概念 builder模式也叫建造者模式或者生成器模式,是由gof提出的23種設計模式中的一種。builder模式是一種物件建立型模式之一,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承和過載的方式,動態地建立具有復合屬性的物件。builder模式是為物件的建立而設計的模...
十 建造模式
建造者模式用於建立一些複雜物件,這些物件內部構件間的建造順序通常是穩定的,但物件內部的構建通常面臨 著複雜的變化。摘自 大話設計模式 基本結構如下 產品,想要建立的複雜物件 抽象建造者 各個構件的抽象建造方法 得到產品的抽象方法 指揮者,指揮建造者 封裝建造順序的方法 產品的構建順序,構件a 構件b...