Design Pattern in Java 101 - Builder Pattern (Creational Pattern)
By admin on Dec 31, 2007 in Creational, Java, Programming
Builder pattern is used to construct a complex object from simple objects step by step.
E.g.,
I have a Message class
public class Message {
private String sender;
private String recipient;
private String header;
private String body;
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getRecipient() {
return recipient;
}
public void setRecipient(String recipient) {
this.recipient = recipient;
}
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String toString() {
return
"Sender: " + sender + "\n" +
"Recipient: " + recipient + "\n" +
"Header: " + header + "\n" +
"Body: " + body ;
}
}
Then create a MessageBuilder class
public abstract class MessageBuilder {
protected Message message;
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
public void createMessage() {
message = new Message();
}
public void constructMessage(){
message = new Message();
}
public void constructSender(String sender){
message.setSender(sender);
}
public void constructRecipient(String recipient){
message.setRecipient(recipient);
}
public abstract void constructMessageHeader();
public abstract void constructMessageBody(String body);
}
I can build different mesages, e.g. SMSMessageBuilder and MMSMessageBuilder
public class SMSMessageBuilder extends MessageBuilder {
public void constructMessageHeader() {
message.setHeader("SMS header");
}
public void constructMessageBody(String body) {
message.setBody(body);
}
}
public class MMSMessageBuilder extends MessageBuilder {
public void constructMessageHeader() {
message.setHeader("MMS header");
}
public void constructMessageBody(String body) {
message.setBody(body);
}
}
ContentProvider class creates the required message using the relevant builder
public class ContentProvider {
private MessageBuilder messageBuilder;
public MessageBuilder getMessageBuilder() {
return messageBuilder;
}
public void setMessageBuilder(MessageBuilder messageBuilder) {
this.messageBuilder = messageBuilder;
}
public Message getMessage() {
return messageBuilder.getMessage();
}
public Message createMessage(
MessageBuilder messageBuilder,
String sender,
String recipient,
String message) {
messageBuilder.constructMessage();
messageBuilder.constructSender(sender);
messageBuilder.constructRecipient(recipient);
messageBuilder.constructMessageHeader();
messageBuilder.constructMessageBody(message);
return messageBuilder.getMessage();
}
}
To test it
public class TestPattern {
public static void main(String[] args){
ContentProvider contentProvider = new ContentProvider();
MessageBuilder smsMessageBuilder = new SMSMessageBuilder();
MessageBuilder mmsMessageBuilder = new MMSMessageBuilder();
Message sms =
contentProvider.createMessage(
smsMessageBuilder, "1234", "5678", "SMS message");
Message mms =
contentProvider.createMessage(
mmsMessageBuilder, "1234", "5678", "MMS message");
System.out.println(sms.toString());
System.out.println(mms.toString());
}
}
The output
Sender: 1234 Recipient: 5678 Header: SMS header Body: SMS message Sender: 1234 Recipient: 5678 Header: MMS header Body: MMS message

Rhett Stewart | Apr 18, 2008 | Reply
montmorilonite abasedness sanballat absciss penalizable demos oversystematic conqueror
1/1
http://webdesignersuk.tripod.com/