Aha!設計模式 16 BUILDER 7

2021-09-02 14:01:07 字數 798 閱讀 9037

效果

3 ) 它使你可對構造過程進行更精細的控制

builder模式與一下子就生成產品的建立型模式不同,它是在導向者的控制下一步一步構造產品的。僅當該產品完成時導向者才從生成器中取回它。因此builder介面相比其他建立型模式能更好的反映產品的構造過程。這使你可以更精細的控制構建過程,從而能更精細的控制所得產品的內部結構。

這是builder模式和工場模式的重要區別之一。工廠模式(簡單工廠或者抽象工廠)是呼叫介面直接產生產品,中間過程使用者無法干預。而builder模式在建立產品時可以一步一步控制產品的生成過程。這種過程往往是引數無法表達的。

還有一點,抽象工廠模式發生的變化一般都是從乙個具象工廠類替換為另乙個具象工廠類;而builder除了替換具象builder以外,還經常會替換director。更有甚者,有相當比例的場景,只是通過向director傳遞不同的資料來控制builder生成另外乙個(而不是另外一種)產品。這種情況也可以考慮暫時不設計builder的繼承關係。當替換builder的需要產生時再重構也不遲。

作者觀點

沒有builder繼承關係的builder模式,和簡單工廠有幾分神似。很多時候,只要能做到乙個類只做一件事就已經是相當好的設計了。

注:

本文中藍色粗體文字都引自《設計模式》一書。

Java設計模式(五) 建造者模式Builder

我們要建造乙個複雜的產品。比如 神舟飛船 iphone。這個複雜的產品的建立,有這樣乙個問題需要處理 要構建的物件,宇宙飛船 package com.iter.devbox.builder 宇宙飛船 author shearer public class airship public orbital...

Aha!設計模式 58 裝飾模式 2

示例 我們從前一篇文章中選取網路資料處理的例子寫一段python 中首先定義了資料處理基類dataprocessor,它有乙個process操作用於處理資料。datacreater是乙個普通的派生類,用於初始化資料。然後是decorator類,它定義了乙個資料成員processor,用於管理裝飾物件...

Aha!設計模式 78 命令模式 3

結構 參與者 協作 client建立乙個concretecommand物件並指定它的receiver物件。某invoker物件接收該concretecommand物件。invoker呼叫concretecommand物件的執行操作。concretecommand物件呼叫receiver的一些操作以執...