iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 0
0
自我挑戰組

30天認識軟體設計及架構系列 第 10

Day 10 軟體設計及架構---設計模式 - 建構者模式(Builder)

今天要介紹的是建構者模式(Builder),可能很多人,包括我都會把這個跟工廠模式搞混,所以我最後會稍微說明兩者的差異。

創建類別的時候,我們也會有建構子,如果我們創建物件的種類太多,例如以日期顯示的類別來說,可以分成只顯示月份、日期,或是年份、月份、日期,年份又分西元和民國,這樣會造成我們有太多的建構子,而且只要有新的格式,就要去修改程式碼,會讓程式維護不易。

class Date{
public:
       Date(int year, int month, int date);
	   Date(int year, int month);
	   Date(int month, int date);
             .
             .
             .
}

這時我們可以使用建構者模式,建構者模式的重點在物件產生的過程,我們要把物件產生的每個步驟都變成一個 Builder,上面的例子就可以分成年份的 Builder、月份的 Builder 還有日期的 Builder,在創建物件時就可以決定要設定哪幾個,就不用寫這麼多的建構子,如果你的程式需要跟別人共筆,就不會讓別人有看不完的使用方式。

class DateBuilder{
public:
  	   DateBuilder setYear(int year);
	   DateBuilder setMonth(int month);
	   DateBuilder setDate(int date);
}

class ViewAllDateBuilder : DateBuilder{
public:
	   DateBuilder setYear(int year){
            _year = year;
       }
       DateBuilder setMonth(int month){
            _month = month;
       }
       DateBuilder setDate(int date){
            _date = date;
       }
	   Date create(){
             return Date(_year, _month, _date);
       }
}

使用方式如下。

DateBuilder builder = new ViewAllDateBuilder();
builder.setYear(2019);
builder.setMonth(10);
builder.setDate(2);
Date date = builder.create();

這樣就可以完成日期的設定。

最後大概講一下建構者跟工廠模式的差異。

建構者模式的重點是要封裝複雜的步驟,不論過程做了什麼,最後只回傳一種東西。工廠模式則是維護一些相關的產品,產出某類別的多項產品。

參考資料:
http://rockssdlog.blogspot.com/2012/05/design-pattern-builder-pattern.html
http://corrupt003-design-pattern.blogspot.com/2017/01/builder-pattern.html


上一篇
Day 9 軟體設計及架構---設計模式 - 工廠模式(Factory)
系列文
30天認識軟體設計及架構10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言