将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
Product(具体产品):表示被构造的复杂对象。
package com.lpw.creator; // 产品 public class Computer { private String zhuBan; private String yingPan; private String cpu; public Computer() { super(); // TODO Auto-generated constructor stub } public Computer(String zhuBan, String yingPan, String cpu) { super(); this.zhuBan = zhuBan; this.yingPan = yingPan; this.cpu = cpu; } public String getZhuBan() { return zhuBan; } public void setZhuBan(String zhuBan) { this.zhuBan = zhuBan; } public String getYingPan() { return yingPan; } public void setYingPan(String yingPan) { this.yingPan = yingPan; } public String getCpu() { return cpu; } public void setCpu(String cpu) { this.cpu = cpu; } }builder(抽象构建产品):为创建一个产品对象的各个部门指定抽象接口。
package com.lpw.creator; // 抽象构建产品 public interface Builder { public void buiidZhuBan(); public void buildYingPan(); public void buildCpu(); public Computer buildComputer(); }builderimpl (抽象构建具体表现):实现builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示
package com.lpw.creator; // 抽象构建的具体实现 public class BuildCompter implements Builder{ private Computer computer = new Computer(); @Override public void buiidZhuBan() { // TODO Auto-generated method stub computer.setZhuBan("华硕"); } @Override public void buildYingPan() { // TODO Auto-generated method stub computer.setYingPan("希捷"); } @Override public void buildCpu() { // TODO Auto-generated method stub computer.setCpu("intel i5"); } @Override public Computer buildComputer() { // TODO Auto-generated method stub return computer; } }director(建造者):构造一个使用builder接口的对象。
package com.lpw.creator; // 建造者 public class Director { // 传入的参数一定要是父类 public static Computer ConstructorCom(Builder bc) { bc.buiidZhuBan(); bc.buildYingPan(); bc.buildCpu(); return bc.buildComputer(); } }易于解耦:将产品本身于产品创建过程进行解耦,可以使用相同的创建过程来得到不同的产品,也就是说希捷一来抽象。
易于精确控制对象的创建:将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰。
易于拓展:
1.建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;
2.如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定限制。
如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品;