建造者模式定义:
建造者模式(Builder Pattern)又叫生成器模式**,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
建造者模式是一步一步创建一个复杂的对象的,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要直到内部的具体构建细节。
案例代码如下:

- ①:
Product(产品角色):一个具体的产品对象。 - ②:
Builder(抽象建造者):创建一个Product对象的各个部件指定的接口。 - ③:
ConcreateBuilder(具体建造者):实现接口,构建和装配各个部件。 - ④:
Director(指挥者):构建一个Builder接口的对象,它主要是用于创建一个复杂的对象。它主要有两个作用- Ⅰ:隔离了客户和对象的生产过程;
- Ⅱ:负责控制产品对象的生产过程。
- Ⅰ:隔离了客户和对象的生产过程;
创建一个具体产品类PersonProduct:
/*具体产品*/@Datapublic class PersonProduct {private String head;private String body;private String armLeft;private String armRight;private String legLeft;private String lefRight;}
创建一个抽象建造者PersonBuilder:
/*抽象建造者*/public abstract class PersonBuilder {protected PersonProduct personProduct = new PersonProduct();public PersonProduct getPersonProduct() {return personProduct;}/*头*/public abstract void buildHead();/*身*/public abstract void buildBody();/*左手*/public abstract void buildArmLeft();/*右手*/public abstract void buildArmRight();/*左腿*/public abstract void buildLegLeft();/*右退*/public abstract void buildLegRight();}
创建一个PersonBuilder的具体构建者PersonThinBuilder:
/*具体构建者*/public class PersonThinBuilder extends PersonBuilder {@Overridepublic void buildHead() {System.out.println("PersonThinBuilder buildHead ...");personProduct.setHead("PersonThinBuilder buildHead ...");}@Overridepublic void buildBody() {System.out.println("PersonThinBuilder buildBody ...");personProduct.setBody("PersonThinBuilder buildBody ...");}@Overridepublic void buildArmLeft() {System.out.println("PersonThinBuilder buildArmLeft ...");personProduct.setArmLeft("PersonThinBuilder buildArmLeft ...");}@Overridepublic void buildArmRight() {System.out.println("PersonThinBuilder buildArmRight ...");personProduct.setArmRight("PersonThinBuilder buildArmRight ...");}@Overridepublic void buildLegLeft() {System.out.println("PersonThinBuilder buildLegLeft ...");personProduct.setLegLeft("PersonThinBuilder buildLegLeft ...");}@Overridepublic void buildLegRight() {System.out.println("PersonThinBuilder buildLegRight ...");personProduct.setLefRight("PersonThinBuilder buildLegRight ...");}}
创建一个PersonBuilder的具体构建者PersonFatBuilder:
/*具体构建者*/public class PersonFatBuilder extends PersonBuilder{@Overridepublic void buildHead() {System.out.println("PersonFatBuilder buildHead ...");personProduct.setHead("PersonFatBuilder buildHead ...");}@Overridepublic void buildBody() {System.out.println("PersonFatBuilder buildBody ...");personProduct.setBody("PersonFatBuilder buildBody ...");}@Overridepublic void buildArmLeft() {System.out.println("PersonFatBuilder buildArmLeft ...");personProduct.setArmLeft("PersonFatBuilder buildArmLeft ...");}@Overridepublic void buildArmRight() {System.out.println("PersonFatBuilder buildArmRight ...");personProduct.setArmRight("PersonFatBuilder buildArmRight ...");}@Overridepublic void buildLegLeft() {System.out.println("PersonFatBuilder buildLegLeft ...");personProduct.setLegLeft("PersonFatBuilder buildLegLeft ...");}@Overridepublic void buildLegRight() {System.out.println("PersonFatBuilder buildLegRight ...");personProduct.setLefRight("PersonFatBuilder buildLegRight ...");}}
创建一个指挥者PersonDirector:
/*指挥者*/public class PersonDirector {private PersonBuilder personBuilder;public PersonDirector(PersonBuilder personBuilder) {this.personBuilder = personBuilder;}public void setPersonBuilder(PersonBuilder personBuilder) {this.personBuilder = personBuilder;}/*创建[PersonProduct]对象*/public PersonProduct createPerson() {personBuilder.buildHead();personBuilder.buildBody();personBuilder.buildArmLeft();personBuilder.buildArmRight();personBuilder.buildLegLeft();personBuilder.buildLegRight();return personBuilder.getPersonProduct();}}
客户端:
/*客户端*/public class Client {public static void main(String[] args) {System.out.println("================== Thin Person ===================");PersonBuilder personThinBuilder = new PersonThinBuilder();PersonDirector director = new PersonDirector(personThinBuilder);PersonProduct thinPerson = director.createPerson();System.out.println("thinPerson = " + thinPerson);System.out.println("================== Fat Person ===================");PersonFatBuilder personFatBuilder = new PersonFatBuilder();director.setPersonBuilder(personFatBuilder);PersonProduct fatPerson = director.createPerson();System.out.println("fatPerson = " + fatPerson);}}
具体输出如下:
================== Thin Person ===================PersonThinBuilder buildHead ...PersonThinBuilder buildBody ...PersonThinBuilder buildArmLeft ...PersonThinBuilder buildArmRight ...PersonThinBuilder buildLegLeft ...PersonThinBuilder buildLegRight ...thinPerson = PersonProduct(head=PersonThinBuilder buildHead ..., body=PersonThinBuilder buildBody ..., armLeft=PersonThinBuilder buildArmLeft ..., armRight=PersonThinBuilder buildArmRight ..., legLeft=PersonThinBuilder buildLegLeft ..., lefRight=PersonThinBuilder buildLegRight ...)================== Fat Person ===================PersonFatBuilder buildHead ...PersonFatBuilder buildBody ...PersonFatBuilder buildArmLeft ...PersonFatBuilder buildArmRight ...PersonFatBuilder buildLegLeft ...PersonFatBuilder buildLegRight ...fatPerson = PersonProduct(head=PersonFatBuilder buildHead ..., body=PersonFatBuilder buildBody ..., armLeft=PersonFatBuilder buildArmLeft ..., armRight=PersonFatBuilder buildArmRight ..., legLeft=PersonFatBuilder buildLegLeft ..., lefRight=PersonFatBuilder buildLegRight ...)
