Acer.java
import java.util.ArrayList; import java.util.List; /** * ----------------------------------------- * @描述 生产宏基笔记本电脑 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-4 <p> * ----------------------------------------- */ public class Acer{ protected List<String> parts = new ArrayList<String>(); //生产CPU public void createCPU() { parts.add("CUP: Intel 酷睿i3 2350M"); } //生产内存 public void createMemory() { parts.add("内存: 4GB DDR3 1333MHz"); } //生产显卡 public void createDisplayCard() { parts.add("显卡: NVIDIA GeForce GT 520M"); } //显示产品信息 public void show(){ System.out.print("产品部件信息:"); for(String part : parts){ System.out.print(part + "\t"); } } }
import java.util.ArrayList; import java.util.List; /** * ----------------------------------------- * @描述 生产戴尔笔记本电脑 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-4 <p> * ----------------------------------------- */ public class Dell{ protected List<String> parts = new ArrayList<String>(); //生产CPU public void createCPU() { parts.add("CUP: Intel 酷睿i7 3612QM"); } //生产内存 public void createMemory() { parts.add("内存: 8GB DDR3 1600MHz"); } //生产显卡 public void createDisplayCard() { parts.add("显卡: NVIDIA GeForce GT 640M+Intel GMA HD 4000"); } //显示产品信息 public void show(){ System.out.print("产品部件信息:"); for(String part : parts){ System.out.print(part + "\t"); } } }
/** * ----------------------------------------- * @描述 客户端测试 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-4 <p> * ----------------------------------------- */ public class Client { private static Acer acer = new Acer(); private static Dell dell = new Dell(); public static void main(String[] args){ /** * 宏基 */ acer.createCPU(); acer.createMemory(); acer.createDisplayCard(); acer.show(); /***************************************/ System.out.println(); /***************************************/ /** * 戴尔 */ dell.createCPU(); dell.createMemory(); dell.createDisplayCard(); dell.show(); } }
仔细观察一下上面的实现,不难发现,不管是生产何种品牌的笔记本,在实现的时候,它们的步骤基本上都是一样的,都是生产电脑相应的部件并添加都电脑里面,在生产不同品牌电脑的时候,都会重复处理这几个步骤,但是明显的是,这几个步骤都是稳定的或者说是一样的,只是每个步骤的具体实现不一样或者说是变化的,如果将这些变化的部分抽取出来,也就是说如果将处理过程与具体的步骤的实现分离开来的话,这样就能够复用这些处理过程,而且这样一来就能很容易的做到在不同品牌电脑之间切换生产。
Product.java
package pattern.builder; import java.util.ArrayList; import java.util.List; /** * ----------------------------------------- * @描述 抽象产品 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-5 <p> * ----------------------------------------- */ public abstract class Product { protected List<String> parts = new ArrayList<String>(); //添加部件 public void add(String part){ parts.add(part); } //显示产品信息 public void show(){ System.out.print("产品部件信息:"); for(String part : parts){ System.out.print(part + "\t"); } } }
package pattern.builder; /** * ----------------------------------------- * @描述 宏基笔记本 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-5 <p> * ----------------------------------------- */ public class Acer extends Product{ //Do other things here }
package pattern.builder; /** * ----------------------------------------- * @描述 戴尔笔记本 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-5 <p> * ----------------------------------------- */ public class Dell extends Product{ //Do other things here }
Builder.java
package pattern.builder; /** * ----------------------------------------- * @描述 抽象建造者 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-5 <p> * ----------------------------------------- */ public interface Builder { //CUP public void buildCPU(); //内存 public void buildMemory(); //显卡 public void buildDisplayCard (); //最终产品 public Product getFinalResult(); }
package pattern.builder; /** * ----------------------------------------- * @描述 宏基笔记本建造者 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-5 <p> * ----------------------------------------- */ public class AcerBuilder implements Builder { private Product product = new Acer(); @Override public void buildCPU() { product.add("CUP: Intel 酷睿i3 2350M"); } @Override public void buildMemory() { product.add("内存: 4GB DDR3 1333MHz"); } @Override public void buildDisplayCard() { product.add("显卡: NVIDIA GeForce GT 520M"); } @Override public Product getFinalResult() { return product; } }
package pattern.builder; /** * ----------------------------------------- * @描述 戴尔笔记本建造者 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-5 <p> * ----------------------------------------- */ public class DellBuilder implements Builder { private Product product = new Dell(); @Override public void buildCPU() { product.add("CUP: Intel 酷睿i7 3612QM"); } @Override public void buildMemory() { product.add("内存: 8GB DDR3 1600MHz"); } @Override public void buildDisplayCard() { product.add("显卡: NVIDIA GeForce GT 640M+Intel GMA HD 4000"); } @Override public Product getFinalResult() { return product; } }
package pattern.builder; /** * ----------------------------------------- * @描述 产品构建指导者 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-5 <p> * ----------------------------------------- */ public class Director { private Builder builder; public Director(Builder builder){ this.builder = builder; } public void construct(){ builder.buildCPU(); builder.buildMemory(); builder.buildDisplayCard(); } }
package pattern.builder; /** * ----------------------------------------- * @描述 客户端测试 * @作者 fancy * @邮箱 [email protected] * @日期 2012-8-5 <p> * ----------------------------------------- */ public class Client { private static Builder acerBuilder = new AcerBuilder(), dellBuilder = new DellBuilder(); public static void main(String[] args){ System.out.print("宏基"); Director director = new Director(acerBuilder); director.construct(); Product product = acerBuilder.getFinalResult(); product.show(); /***************************************/ System.out.println(); /***************************************/ System.out.print("戴尔"); director = new Director(dellBuilder); director.construct(); product = dellBuilder.getFinalResult(); product.show(); } }
宏基产品部件信息:CUP: Intel 酷睿i3 2350M 内存: 4GB DDR3 1333MHz 显卡: NVIDIA GeForce GT 520M 戴尔产品部件信息:CUP: Intel 酷睿i7 3612QM 内存: 8GB DDR3 1600MHz 显卡: NVIDIA GeForce GT 640M+Intel GMA HD 4000
如果它的返回值类型是 Acer,那么 DellBuilder 类就会有问题,如果它的返回值类型是 Dell,那么 AcerBuilder 类就会有问题;
该博文转载自http://www.blogjava.net/fancydeepin/archive/2012/08/05/384783.html