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,电子书,收音机]