builder模式也叫建造者模式或者生成器模式,是由gof提出的23種設計模式中的一種。builder模式是一種物件建立型模式之一,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承和過載的方式,動態地建立具有復合屬性的物件。
建造者模式的結構
在這樣的設計模式中,有以下幾個角色:
builder:為建立乙個產品物件的各個部件指定抽象介面。
concretebuilder:實現builder的介面以構造和裝配該產品的各個部件,定義並明確它所建立的表示,並提供乙個檢索產品的介面。
director:構造乙個使用builder介面的物件。
product:表示被構造的複雜物件。concretebuilder建立該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的介面。
首先,舉個例子,建造者模式我們比方我們要造個房子。
房子的圖紙
public
class
house
public
void
setfloor
(string floor)
public string getwall()
public
void
setwall
(string wall)
public string getroof()
public
void
setroof
(string roof)
}
有了圖紙後,最笨的方法就是自己造房子
客戶端
public
class
mainclass
}
可是這樣的方法不是很好,真正我們造房子都是找施工隊,所以我們要把造房子分離出來,交給施工隊
新建乙個施工隊,為了擴充套件性,宣告乙個施工隊的介面。
public
inte***ce
housebuilder
新建乙個施工隊,實現此介面
public
class
loufangbuilder
implements
housebuilder
@override
public
void
makewall()
@override
public
void
makeroof()
@override
public house gethouse()
}
客戶端
public
class
mainclass
}
可以看到,這樣子造房子就交給施工隊了,但可以看到造房子的具體細節還在客戶端裡,如圖。
這就相當於我們在指導施工隊幹活,這肯定不是最好的方案,最好的解決方案,是由乙個設計師也可以說是指揮者來指導工程隊,所以在新建乙個指揮者。
public
class
housedirector
public
void
make()
}
客戶端
public
class
mainclass
}
這樣子,把施工隊交給這個設計者,施工細節的工作就由這個設計者執行了。
當然,還有一種寫法,有一些細微的改動,也是更常用的,就是設計者(director)不在構造時傳入builder,而是在呼叫方法時,才傳入,像這樣
public
class
housedirector
}
客戶端
public
class
mainclass
}
這樣子,出來的效果是一樣的。
這就是乙個簡單的建造者模式
這樣也提高了系統的擴充套件性與可維護性,如果不想造樓房了,想造乙個別墅,只需新增乙個別墅施工隊就好了,像這樣
public
class
bieshubuilder
implements
housebuilder
@override
public
void
makewall()
@override
public
void
makeroof()
@override
public house gethouse()
}
客戶端只需把施工隊換成別墅施工隊
public
class
mainclass
}
六 設計模式之建造者模式(建立型)
建造者模式概述 builder模式也叫建造者模式或者生成器模式,是由gof提出的23種設計模式中的一種。builder模式是一種物件建立型模式之一,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承和過載的方式,動態地建立具有復合屬性的物件。建造者模式的結構 角色在這樣的設計模...
建立型設計模式之建造者模式
建造者模式 主要用於將產品修飾的這部分內容抽象化,提供給外部乙個自由定製的修飾渠道,達到自由切換修飾規則但是不用修改舊 的效果。帶有抽象介面的建造者模式主要涉及的物件有 引導者 decorate 產品 抽象建造者介面 builder 定製化的builder。打個比方,我開著一輛拖拉機去石料場運載建築...
建立型設計模式之 建造者模式
建造者模式也被稱為生成器模式,它是建立乙個複雜物件的建立型模式,其將構建複雜物件的過程和它的部件解耦,使得構建過程和部件的表示分離開來。我們接著用工廠模式中的果園舉例,我們的水果店為了吸引老顧客 以及新顧客辦理會員,推出了各式各樣的 活動,例如會員購買蘋果 香蕉 桔子可以減15元 假日 活動可以立減...