设计模式(第四式:建造者模式)
生活随笔
收集整理的這篇文章主要介紹了
设计模式(第四式:建造者模式)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概念:
建造者模式:將一個結構的建造和它的表示分離,使得同樣的建造過程可以創建不同的表示。
實現:
定義書籍接口:
public abstract class Book {private Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}書籍類別:(小說類書籍、工具類書籍...)
public class NovelBook extends Book {private String plot;public String getPlot() {return plot;}public void setPlot(String plot) {this.plot = plot;}} public class ToolBook extends Book {private String purpose;public String getPurpose() {return purpose;}public void setPurpose(String purpose) {this.purpose = purpose;}}定義創建者接口:
public interface BookBuilder {/*** 設置書的id* @param id*/void setBookId(Integer id);/*** 設置書的名稱* @param name*/void setBookName(String name);Book createBook();}創建者類別:
public class NovelBookBuilder implements BookBuilder {NovelBook book = new NovelBook();@Overridepublic void setBookId(Integer id) {book.setId(id);}@Overridepublic void setBookName(String name) {book.setName(name);}@Overridepublic Book createBook() {return book;}public void setBookPlot(String plot){book.setPlot(plot);}} public class ToolBookBuilder implements BookBuilder {ToolBook book = new ToolBook();@Overridepublic void setBookId(Integer id) {book.setId(id);}@Overridepublic void setBookName(String name) {book.setName(name);}@Overridepublic Book createBook() {return book;}public void setPurpose(String purpose) {book.setPurpose(purpose);}}
分析:通過代碼可以簡單的分析一下,有沒有一種很熟悉的感覺,但又好像覺得不一樣,這就對了,設計模式中很多都是這樣的感覺,但仔細體會,會有很奇妙的發現,就是有不一樣的地放
1.容易擴展,但不具備普遍性,也就是可以很方便的增加新的類型和對應的建造者,但是還是在一定數量內,不具有一般普遍性,這個主要取決于被創造的對象是否高度統一。
2.封裝型比較好,外部不用知道內部具體什么操作,只關心具體對象的使用即可。
3.可以和單例或者工廠方法組合。
4.適用場景:
?? ?? a.在調用相同方法,因為順序不同而導致結果不同時可以考慮。
?? ?? b.在構建特別復雜類型時,比如,Book中有一個Author(作者)類型等,或是還需要Cover(封面)類型,甚至多個類型組合。并且這些屬性只要在用的前一刻復制就可以,并不影響其他地方使用。
?? ?? ...
經典框架中使用的:
Spring框架,Httpclient中對Cookie容器的設計
轉載于:https://www.cnblogs.com/ben-mario/p/10688049.html
總結
以上是生活随笔為你收集整理的设计模式(第四式:建造者模式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Vue的父子组件通信实现todolis
- 下一篇: vue脚手架引入swiper