Builder Pattern:可以将一个产品的内部表象与产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。
Mobile.java
package com.flyingh.product;
import java.util.List;
public class Mobile {
private List<String> list;
public Mobile(List<String> list) {
super();
this.list = list;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
@Override
public String toString() {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder("手机拥有功能:[");
for (String str : list) {
sb.append(str).append(",");
}
sb.deleteCharAt(sb.length() - 1).append("]");
return sb.toString();
}
}
MobileBuilder.java
package com.flyingh.ibuilder;
import com.flyingh.product.Mobile;
public interface MobileBuilder {
void addDialFunction();
void addMp3Function();
void addMp4Function();
void addSMSFunction();
void addMMSFunction();
void addJavaFunction();
void addPhotoFunction();
void addEBookFunction();
void addRadioFunction();
void addGameFunction();
Mobile getMobile();
}
ConcreteMobileBuilder.java
package com.flyingh.builder;
import java.util.ArrayList;
import java.util.List;
import com.flyingh.ibuilder.MobileBuilder;
import com.flyingh.product.Mobile;
public class ConcreteMobileBuilder implements MobileBuilder {
private List<String> list = new ArrayList<String>();
@Override
public void addDialFunction() {
// TODO Auto-generated method stub
System.out.println("添加打电话功能!");
list.add("打电话");
}
@Override
public void addMp3Function() {
// TODO Auto-generated method stub
System.out.println("添加Mp3功能!");
list.add("Mp3");
}
@Override
public void addMp4Function() {
// TODO Auto-generated method stub
System.out.println("添加Mp4功能!");
list.add("Mp4");
}
@Override
public void addSMSFunction() {
// TODO Auto-generated method stub
System.out.println("添加发短信功能!");
list.add("发短信");
}
@Override
public void addMMSFunction() {
// TODO Auto-generated method stub
System.out.println("添加彩信功能!");
list.add("彩信");
}
@Override
public void addJavaFunction() {
// TODO Auto-generated method stub
System.out.println("添加Java功能!");
list.add("Java");
}
@Override
public void addPhotoFunction() {
// TODO Auto-generated method stub
System.out.println("添加照相机功能!");
list.add("照相机");
}
@Override
public void addEBookFunction() {
// TODO Auto-generated method stub
System.out.println("添加电子书功能!");
list.add("电子书");
}
@Override
public void addRadioFunction() {
// TODO Auto-generated method stub
System.out.println("添加收音机功能!");
list.add("收音机");
}
@Override
public void addGameFunction() {
// TODO Auto-generated method stub
System.out.println("添加游戏功能!");
list.add("游戏");
}
@Override
public Mobile getMobile() {
// TODO Auto-generated method stub
return new Mobile(list);
}
}
Director.java
package com.flyingh.idirector;
public interface Director {
void construct();
}
ConcreteDirectorA.java
package com.flyingh.director;
import com.flyingh.ibuilder.MobileBuilder;
import com.flyingh.idirector.Director;
public class ConcreteDirectorA implements Director {
private MobileBuilder builder;
public ConcreteDirectorA(MobileBuilder builder) {
super();
this.builder = builder;
}
public void construct() {
builder.addDialFunction();
builder.addSMSFunction();
builder.addMMSFunction();
builder.addMp3Function();
builder.addEBookFunction();
builder.addJavaFunction();
}
}
ConcreteDirectorB.java
package com.flyingh.director;
import com.flyingh.ibuilder.MobileBuilder;
import com.flyingh.idirector.Director;
public class ConcreteDirectorB implements Director {
private MobileBuilder builder;
public ConcreteDirectorB(MobileBuilder builder) {
super();
this.builder = builder;
}
public void construct() {
builder.addDialFunction();
builder.addSMSFunction();
builder.addMMSFunction();
builder.addMp3Function();
builder.addMp4Function();
builder.addGameFunction();
builder.addJavaFunction();
builder.addEBookFunction();
builder.addRadioFunction();
}
}
Client.java
package com.flyingh.client;
import com.flyingh.builder.ConcreteMobileBuilder;
import com.flyingh.director.ConcreteDirectorA;
import com.flyingh.director.ConcreteDirectorB;
import com.flyingh.ibuilder.MobileBuilder;
import com.flyingh.idirector.Director;
import com.flyingh.product.Mobile;
public class Client {
public static void main(String[] args) {
MobileBuilder builder = new ConcreteMobileBuilder();
Director director = new ConcreteDirectorA(builder);
director.construct();
Mobile mobile = builder.getMobile();
System.out.println(mobile);
System.out.println("*****************");
builder = new ConcreteMobileBuilder();
director = new ConcreteDirectorB(builder);
director.construct();
mobile = builder.getMobile();
System.out.println(mobile);
}
}
程序运行结果如下:
添加打电话功能!
添加发短信功能!
添加彩信功能!
添加Mp3功能!
添加电子书功能!
添加Java功能!
手机拥有功能:[打电话,发短信,彩信,Mp3,电子书,Java]
*****************
添加打电话功能!
添加发短信功能!
添加彩信功能!
添加Mp3功能!
添加Mp4功能!
添加游戏功能!
添加Java功能!
添加电子书功能!
添加收音机功能!
手机拥有功能:[打电话,发短信,彩信,Mp3,Mp4,游戏,Java,电子书,收音机]