Java設計模式之建造者模式

來源:互聯網
上載者:User

標籤:

建造者模式簡介

建造者模式是將一個複雜的對象的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。換句話說,建造模式是對象的建立模式。建造模式可以將一個產品的內部表象與產品的生產過程分割開來,從而可以使一個建造過程產生具有不同的內部表象的產品對象。

建造者模式的設計方法

建造者模式通常有四個結構主體,它們分別是Director,Builder,ConcreteBuilder,Product。每個主體所起的作用不一樣,下面分別說說它們的作用。

Director的作用

構造一個使用Builder抽象介面的對象,即使用一個Builder對象來構造一個Director對象。

Builder的作用

為建立一個Product對象的各個組件指定抽象介面,即定義一些公用部分。

ConcreteBuilder的作用

實現Builder的公用介面以構造產品的各個零組件;

定義並明確它所建立的表示;

提供一個擷取產品的介面,例如get方法;

Product的作用

表示被構造的複雜物件,包含定義組件的類,並將這些組件裝配成最終的產品。

建造者模式的範例程式碼 樣本介紹

下面將通過一個訊息推送功能來掩飾建造者模式的應用,先在有兩種訊息,一種是上線提醒,另外一種是離線提醒。訊息的內容是時間:****  某人已經上線(或下線)!首先,我們建立訊息類,由於訊息體大致相同,因此我們先定義一個公用的抽象訊息,然後讓兩種具體的訊息繼承這個抽象類別,可以實現部分代碼共用。

抽象訊息


package com.builder;/** * 通知抽象類別 */import java.util.Date;public abstract class AbstractNotification {private String subject;private Date date;protected String content;public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public String getContent() {return content;}public void send() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("時間:");stringBuilder.append(this.getDate());stringBuilder.append("\t");stringBuilder.append(this.getSubject());stringBuilder.append(this.getContent());System.out.println(stringBuilder.toString());}}
上線提醒訊息


package com.builder;public class OnlineNotification extends AbstractNotification {public OnlineNotification() {this.content="已經上線";}}




下線提醒訊息


package com.builder;public class OfflineNotification extends AbstractNotification {public OfflineNotification() {this.content="已經下線";}}



然後我們建立一個Builder介面,裡面定義建立姓名、日期的公用方法,並且定義一個擷取通知的方法。


Builder介面


package com.builder;import java.util.Date;public interface Builder {public abstract void buildSubject(String subject);public abstract void buildDate(Date date);public abstract AbstractNotification getNotification(); }



接著我們建立兩個具體的Builder對象,實現Builder介面。


兩個ConcreteBuilder類


package com.builder;import java.util.Date;public class OnlineNotificationBuilder implements Builder {private AbstractNotification abstractNotification;public OnlineNotificationBuilder() {abstractNotification=new OnlineNotification();}@Overridepublic void buildSubject(String subject) {abstractNotification.setSubject(subject);}@Overridepublic void buildDate(Date date) {abstractNotification.setDate(date);}@Overridepublic AbstractNotification getNotification() {return abstractNotification;}}



package com.builder;import java.util.Date;public class OfflineNotificationBuilder implements Builder {private AbstractNotification abstractNotification;public OfflineNotificationBuilder() {abstractNotification=new OfflineNotification();}@Overridepublic void buildSubject(String subject) {abstractNotification.setSubject(subject);}@Overridepublic void buildDate(Date date) {abstractNotification.setDate(date);}@Overridepublic AbstractNotification getNotification() {return abstractNotification;}}




Director類
package com.builder;import java.util.Date;public class Director {private Builder builder;public Director(Builder builder) {this.builder = builder;}public void construct(String subject,Date date) {builder.buildSubject(subject);builder.buildDate(date);AbstractNotification notification = builder.getNotification();notification.send();}}



測試代碼


package com.builder;import java.util.Date;public class Test {public static void main(String[] args) {Builder onlineNotificationBuilder = new OnlineNotificationBuilder();Director director = new Director(onlineNotificationBuilder);director.construct("張三", new Date());}}



測試結果



時間:Thu Aug 13 16:07:58 CST 2015張三已經上線





Java設計模式之建造者模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.