1.什麼是建造者模式?
建造者模式(builder)是將乙個複雜物件的構建層與其表示層相互分離,同樣的構建過程採用不同的表示。
建造者模式的特點是分步構造乙個複雜的物件,可以用不同組合或順序建造出不同意義的物件,通常使用者並不需要知道建造的細節,通常使用鏈式呼叫來進行建造過程,最後呼叫build方法來生成最終物件。
同樣作為建立型的設計模式,需要注意和工程模式的區別,工程雖然也是建立物件,單怎樣建立無所謂,工程模式關注的是建立的結果;而建造者模式不僅得到了結果,同時也參與了建立的具體過程,適合用來建立乙個複雜的復合物件。
2.es6中的建造者模式
下面我們來假設乙個出版社的書籍後台錄入系統的業務場景,書籍有四個必填資訊,分別是書名,作者,**,分類;我們希望建立乙個書籍物件返回給後端。下面我們來一步一步深入使用es6的語法結合建造者模式建立物件。
// 書籍建造者類
class bookbuilder
withname()
withauthor(author)
withprice(price)
withcategory(category)
build()}}
// 呼叫建造者類
const book = new bookbuilder()
.withname("高效能人士的七個習慣")
.withauthor('史蒂芬·柯維')
.withprice(51)
.withcategory('勵志')
上面就通過bookbuilder這個建立者類的寫法和呼叫方法,但是僅僅是乙個4個屬性的物件,我們使用了如此多的**去建立,這遠比直接再constructor傳遞引數建立物件要複雜得多。這是由於在建立的過程中,我們有太多的with***x方法。我們其實可以自動建立這類with***x方法以簡化**。
//書籍建造者類
class bookbuilder $`;
this[withname] = value =>
console.log('key=',key)
console.log('withname=',withname)
console.log('this[withname]=',this[withname])})}
//呼叫建造者
build()
}, {})}}
const book = new bookbuilder().withname("高效能人士的七個習慣").withauthor('史蒂芬·柯維').withprice(51).withcategory('勵志').build();
上面的bookbuilder這個類和第乙個例子的效果一樣,但是長度確實減少不少,在有更多屬性的屬性的時候,減少的**量會更為明顯。我們將所有的建造方法with***x在constructor呼叫時自動被建立你,這裡我們使用了一些es6的新語法:object.keys獲取物件屬性陣列,…的合併物件的語法。
雖然該寫法在閱讀起來會比第乙個方法難以理解,但是這樣寫法的真正作用在於,當我們需要許多的建造者類時,我們可以將上面自動建立with***x和build的**提取為乙個父類。在建立其它建造者類時繼承該父類,這使得在建立多個建造者類時變得十分容易。
//父類
class basebuilder $`;
this[withname] = value => })}
build()
}, {})}}
//子類1: 書籍建造者類
class bookbuilder extends basebuilder
}//子類2: 印刷廠建造者類
class printhousebuilder extends basebuilder
}//呼叫書籍建造者類
const book = new bookbuilder().withname("高效能人士的七個習慣").withauthor('史蒂芬·柯維').withprice(51).withcategory('勵志').build();
//呼叫印刷廠建造類
const printhouse = new printhousebuilder().withname('新華印刷廠').withlocation('北京海淀區').withquality('a').build();
可以看出,建造者模式的使用有且只適合建立極為複雜的物件。在前端的實際業務中,在沒有這類極為複雜的物件的建立時,還是應該直接使用物件字面或工廠模式等方式建立物件。
建造者模式
1.定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。2.uml 類圖 結構 該結構 演示了複雜物件被一步一步建立的建造者模式。builder pattern structural example using system using system.collection...
建造者模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
建造者模式
建造者模式將複雜物件的構建和它的表示分離,使同樣的構建過程能夠構建出不同的表示。以乙個建造小人為例子,可以建造2種小人,胖子和瘦子 include using namespace std class builder 抽象建造者類 class buildthinman public builder 瘦...