《java與模式》學習系列——建造者模式

來源:互聯網
上載者:User

 

一、建造(Builder)模式結構圖

建造者模式將產品的結構和產品的零件建造過程對用戶端隱藏起來,把對建造過程進行指揮的責任和具體建造者零件的責任分割分開,達到責任劃分和封裝的目的。

建造模式利用一個導演者對象和具體建造者對象一個一個的建造出所有零件,從而建造出完整的產品對象。

結構圖如下:

二、建造模式在java中的應用

JavaMail中的建造模式

JavaMail是一組J2SE的擴充API的一個類庫,設計師可以使用它很容易的開發出功能齊備的用戶端電子郵件軟體。

JavaMail中的Message和MimeMessage等類均是退化的建造模式的應用。作為用戶端和導演對象,MailSender通過一步步的提供MimeMessage對象的“零件”性質,也就是from、recipient、subject、text等,最後得到整個的產品對象,也就是MimeMessage對象。

代碼如下:

public class MailSender {</p><p> private static MimeMessage message;<br /> public static void main(String args[]){<br /> //你的smtp伺服器位址<br /> String smtpHost = "smtp.mycompany.com" ;<br /> //寄件者的地址<br /> String from ="jeff.yan@mycompany.com";<br /> //收件者的地址<br /> String to = "ni.hao@youcompany.com";</p><p> Properties props = new Properties();<br /> props.put("mail.smtp.host", smtpHost);<br /> Session session= Session.getDefaultInsatance(props,null);<br /> try{<br /> InternetAddress[] address = {new InternetAddress(to)};<br /> //建立message對象<br /> message = new MimeMessage(session);<br /> //建造寄件者位元址零件<br /> message.setFrom(new InternetAddress(from));<br /> //建造收件者位元址零件<br /> message.setReipients(Message.RecipientType.TO,address);<br /> //建造主題零件<br /> mesage.setSubject("Hello from Jeff");<br /> //建造發送時間零件<br /> message.setSentDate(new Date());<br /> //建造內容零件<br /> message.setText("Hello,how are things going?");<br /> //發送郵件,相當於產品返還方法<br /> Transport.send(message);<br /> System.out.println("email has been sent");<br /> }catch(Exception e){<br /> System.out.println(e);<br /> }<br /> }<br />} 

三、在什麼情況下使用建造者模式

1、 
需要產生的產品對象有複雜的內部結構。每一個內部成分本身可以是對象,也可以是一個對象(即產品對象)的一個組成部分。

2、 
需要產生的產品對象的屬性相互依賴。建造模式可以強制實行一種分步驟進行的建造過程,因此,如果產品對象的一個屬性必須在另一個屬性被賦值之後才可以被賦值,使用建造模式便是一個很好的設計思想。

3、 
在對象建立過程中會使用到系統中的其他一些對象,這些產品對象的建立過程不易得到。

四、建造模式與其他模式的關係

建造模式與抽象原廠模式的區別

在抽象原廠模式中,每一次工廠對象被調用時都會返還一個完整的產品對象,而用戶端有可能會決定把這些產品組裝成一個更大更複雜的產品,也有可能不會。建造類則不同,它一點一點的建造出一個複雜的產品,而這個產品的組裝過程就發生在建造者角色內部。建造者模式的用戶端拿到的是一個完整的最後產品。

換言之,雖然抽象原廠模式與建造模式都是設計模式,但是抽象原廠模式處在更加具體的尺度,而建造模式則處於更加宏觀的尺度上。一個系統可以有一個建造模式和一個抽象原廠模式組成,用戶端通過調用這個建造角色,間接的調用另一個抽象原廠模式的工廠角色。原廠模式返還不同產品組的零件,而建造者模式則把它們組裝起來。

建造模式與策略模式

建造模式在結構上很接近於策略模式,事實上建造模式是策略模式的一種特殊情況,這兩種模式的區別在於他們的用意不同。建造模式適用於為用戶端一點一點的建造新的對象,而不同類型的具體建造者角色雖然都擁有相同的介面,但是他們所建立出來的對象則可能完全不同。

策略模式的目的是為演算法提供抽象的介面。換言之,一個具體策略類把一個演算法封裝到一個對象裡面,而不同的具體策略對象為一種一般性的服務提供不同的實現。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.