設計模式之建造者模式

2021-09-29 12:44:31 字數 2431 閱讀 1809

將乙個複雜的物件的建立與它的表示分離,使得同樣的建立過程有不同的表示。

一般的建造者模式,我們通過造房子的uml類圖來理解一下

這裡有四個角色,設計師,抽象建造者,具體建造者,還有所需要建造的物件。

下面看看具體的**

設計師:

/** 

* 設計師 和建造者是聚合關係(aggregation)表示has-a的關係,是一種不穩定的包含關係 想象一下員工和老闆的關係

* @author seven

* */

public

class

designer

}

抽象構造者

/**

* 抽象建造者 工人

* * @author seven

* */

public

abstract

class

builder

具體構造者

public

class

workerbuilder

extends

builder

@override

public

void

builderfloor()

@override

public house genhouse()

}

房子:

/**

* 需要造的房子

* * @author seven

* */

public

class

house

public

void

setwindow

(string window)

public string getfloor()

public

void

setfloor

(string floor)

@override

public string tostring()

}

我們在來看看客戶端的呼叫

public

class

client

}

我們來看看列印

house [window=歐式窗戶, floor=法式地板]

這樣就完成了房子的構建,我們並沒有直接去new 乙個house,而是由設計師去建立的這一切,不需要知道構造的過程。這就是標準的建造者模式。下面來開看建造者模式的變異,我們在上面的設計中,我們發現,通過house物件還是可以通過set方法區修改room的屬性的,於是我們移除room的set方法,在workbuilder中增加乙個內部類house params,並且包含house 的全部屬性,然後在room類中提供乙個包含houseparams物件的引用,並將裡面的引數設定給當前的house物件,我們在workbuilder中提供設定houseparams引數的方法,結果**就變成了這樣:

房子:

public

class

house

(workerbuilder.houseparams houseparams)

}

構造者

public

class

workerbuilder

public workerbuilder builderfloor

(string floor)

public house genhouse()

public

class

houseparams

}

客戶端**:

public

class

client

}

列印結果

house [window=歐式窗戶, floor=法式地板]

這樣也是建造者模式。看起來像不像我們建立dialog的呼叫過程。其實翻看原始碼,設計思想很相似的,這裡就不做詳細介紹了。

設計模式之建造者模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟 設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設 計模式 和...

設計模式之建造者模式

建造者模式也叫生成器模式,是一種物件建立型模式,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承或過載的方式,動態的建立具有復合屬性的物件。應用場景 物件的建立 builder 模式是為物件的建立而設計的模式 建立的是乙個復合物件 被建立的物件為乙個具有復合屬性的復合物件 關...

設計模式之建造者模式

在做服務介面的時候,往往在業務處理之前需要做業務校驗,格式校驗等業務前處理。這些介面有個相同的特徵,就是必須經過這些處理步驟之後才能做核心的業務處理,拓展的服務介面也必須經過這些處理。基於這個特徵,我們就來分析一下設計模式中,建造者模式。我們先建乙個基礎的服務類 public abstract cl...