建造者模式也被稱為生成器模式,它是建立乙個複雜物件的建立型模式,其將構建複雜物件的過程和它的部件解耦,使得構建過程和部件的表示分離開來。
我們接著用工廠模式中的果園舉例,我們的水果店為了吸引老顧客、以及新顧客辦理會員,推出了各式各樣的**活動,例如會員購買蘋果、香蕉、桔子可以減15元;假日**活動可以立減10元的活動;如圖,目前我們推出了兩種活動**
上面一條流程可以抽象為如下步驟:首先設定蘋果禮盒價錢-->設定香蕉禮盒價錢-->設定桔子禮盒價錢-->設定折扣價錢,最終我們拿到了水果**的結算價。抽象步驟如下:
建造者模式定義:將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
在建造者模式中有如下角色。
• director:導演類,負責安排已有模組的順序,然後通知builder開始建造。
• builder:抽象builder類,規範產品的組建,一般由子類實現。
• concretebulider:具體建造者,實現抽象 builder 類定義的所有方法,並且返回乙個組建好的物件。
• product:產品類。
對應的類圖:
對應的實現**:
建造者需要的複雜建造步驟,最終需要返回這個複雜的**物件:
//建立乙個mealbuilder類,實際的builder類負責建立**meal物件。
public inte***ce builder
兩種對應的建造師,就是這個複雜步驟的實現物件:假期水果**建造者:
/**
* 假期水果**
*/public class holidaybuilder implements builder
@override
public void buildbanana(int price)
@override
public void buildorange(int price)
@override
public fruitmeal getfruitmeal()
}
老會員水果**建造者:
/**
* 老會員水果**
*/public class oldcustomerbuilder implements builder
@override
public void buildbanana(int price)
@override
public void buildorange(int price)
@override
public fruitmeal getfruitmeal()
}
最終需要建造的水果**類:
//建立乙個水果**meal類
public class fruitmeal
}public void setbanana(banana banana)
public void setorange(orange orange)
public int cost()
public void init()
if (null != orange)
if (null != banana)
if (totalprice > 0)
}public void showitems()
}
導演,建造類的使用者:
public class fruitmealcontroller
public static void main(string args)
}
建立型設計模式之建造者模式
建造者模式 主要用於將產品修飾的這部分內容抽象化,提供給外部乙個自由定製的修飾渠道,達到自由切換修飾規則但是不用修改舊 的效果。帶有抽象介面的建造者模式主要涉及的物件有 引導者 decorate 產品 抽象建造者介面 builder 定製化的builder。打個比方,我開著一輛拖拉機去石料場運載建築...
設計模式建立型之建造者模式
有時需要建立乙個複雜物件,並且這個複雜物件由其各部分子物件通過一定的步驟組合而成。比如我們要生產乙個車,而車是由其它一些配件如引擎,車燈,輪子等組成。而且組裝是有一定順序的。如下 生產引擎 public class engine 生產車燈 public light 輪子 public class w...
建立型設計模式 建造者模式
建造者模式的結構 產品角色 抽象建造者 具體建造者 指揮者。相比抽象工廠模式,省掉了抽象產品,多了指揮者。產品class product 抽象建造者 abstract class builder 具體建造者 public class concretebuilder extends builder p...