建立型設計模式之 建造者模式

2021-10-07 19:25:34 字數 2180 閱讀 6802

建造者模式也被稱為生成器模式,它是建立乙個複雜物件的建立型模式,其將構建複雜物件的過程和它的部件解耦,使得構建過程和部件的表示分離開來。

我們接著用工廠模式中的果園舉例,我們的水果店為了吸引老顧客、以及新顧客辦理會員,推出了各式各樣的**活動,例如會員購買蘋果、香蕉、桔子可以減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...