Builder設計模式的學習
對于Builder模式很簡單,但是一直想不明白為什么要這么設計,為什么要向builder要Product而不是向知道建造過程的Director要。剛才google到一篇文章,總算清楚了。在這里轉貼一下這位richardluo的比喻。
簡單地說,就好象我要一座房子住,可是我不知道怎么蓋(簡單的砌墻,層次較低),也不知道怎么樣設計(建幾個房間,幾個門好看,層次較高),于是我需要找一幫民工,他們會砌墻,還得找個設計師,他知道怎么設計,我還要確保民工聽設計師的領導,而設計師本身也不干活,光是下命令,這里砌一堵墻,這里砌一扇門,這樣民工開始建設,最后,我可以向民工要房子了。在這個過程中,設計師是什么也沒有,除了他在腦子里的設計和命令,所以要房子也是跟民工要,記住了!
以下是richardluo的代碼,我根據他的思路加上了相應的注釋。
1,定義工人接口,就是能夠完成建造房子任務的人的通用要求。
// 工人接口,定義了各個工人所要進行的工所作。他們負責進行具體部件如窗戶,地板的建造。
// 同時因為房子是民工建的,因此建設完成后由他把房子遞交回房主
public interface Builder {
public void makeWindow();
public void makeFloor();
public Room getRoom();
}
2,定義設計師,他的職責是指揮房主指派給他的工人按照自己的設計意圖建造房子。
// 設計師。他知道房子應該怎么設計,但他不會自己去建造,而是指揮民工去建造。
public class Designer {
// 指揮民工進行工作
public void order(Builder builder) {
builder.makeWindow();
builder.makeFloor();
}
}
3,民工,他負責具體事物的實施。
// 民工。負責進行具體部件如窗戶,地板的建造。
//同時因為房子是民工建的,因此建設完成后由他把房子遞交回房主
public class Mingong implements Builder {
private String window="";
private String floor="";
public void makeWindow() {
window=new String("window");
}
public void makeFloor(){
floor=new String("floor");
}
// 回交房子給房主
public Room getRoom() {
if((!window.equals(""))&&(!floor.equals(""))) {
System.out.println("room ready!");
return new Room();
}
else return null;
}
}
4,房主,就是雇人,收房。
// 房主。房主的任務就是聘請一個民工,一個設計師,同時把民工給設計師指揮,督促設計師開展工作。最后從民工手上收房。
public class Client {
public static void main(String[] args) {
Builder mingong = new Mingong();
Designer designer = new Designer();
designer.order(mingong);
mingong.getRoom();
}
}
5.房子類:
public class Room
{
public Room()
{
System.out.println("房子造好了");
}
}
簡單地說,就好象我要一座房子住,可是我不知道怎么蓋(簡單的砌墻,層次較低),也不知道怎么樣設計(建幾個房間,幾個門好看,層次較高),于是我需要找一幫民工,他們會砌墻,還得找個設計師,他知道怎么設計,我還要確保民工聽設計師的領導,而設計師本身也不干活,光是下命令,這里砌一堵墻,這里砌一扇門,這樣民工開始建設,最后,我可以向民工要房子了。在這個過程中,設計師是什么也沒有,除了他在腦子里的設計和命令,所以要房子也是跟民工要,記住了!
以下是richardluo的代碼,我根據他的思路加上了相應的注釋。
1,定義工人接口,就是能夠完成建造房子任務的人的通用要求。













































4,房主,就是雇人,收房。


















posted on 2008-05-23 17:18 々上善若水々 閱讀(1382) 評論(0) 編輯 收藏 所屬分類: 設計模式