建造者模式: 将复杂对象的建造和表示分离, 使同样的建造过程可以创造出不同细节的产品.
建造者模式,听名字就应该知道和工厂模式一样,是用来创造对象的。但是建造者和工厂模式的区别就是工厂模式只关注最终的产品,它往往是简单的调用被创建者的构造函数;而建造者更关心细节, 它定义了创建一个复杂对象所需的步骤, 而创建者具体的实现类可根据具体的需求,调整创建细节。
示例:
- //产品
- package designpattern.builder;
- public class Product {
- private String part1;
- private String part2;
- private String part3;
- public String getPart1() {
- return part1;
- }
- public void setPart1(String part1) {
- this.part1 = part1;
- }
- public String getPart2() {
- return part2;
- }
- public void setPart2(String part2) {
- this.part2 = part2;
- }
- public String getPart3() {
- return part3;
- }
- public void setPart3(String part3) {
- this.part3 = part3;
- }
- }
- //抽象建造者
- package designpattern.builder;
- public abstract class Builder {
- public abstract void buildPart1();
- public abstract void buildPart2();
- public abstract void buildPart3();
- public abstract Product getResult();
- }
- //具体建造者
- package designpattern.builder;
- public class ConcreteBuilder extends Builder{
- Product product = new Product();
- public void buildPart1() {
- System.out.println("build part 1 for product");
- product.setPart1("part1");
- }
- public void buildPart2() {
- System.out.println("build part 2 for product");
- product.setPart2("part2");
- }
- public void buildPart3() {
- System.out.println("build part 3 for product");
- product.setPart3("part3");
- }
- public Product getResult() {
- return product;
- }
- }
- //指挥者
- package designpattern.builder;
- public class Director {
- public void construct(Builder b){
- b.buildPart1();
- b.buildPart2();
- b.buildPart3();
- //return b.getResult();
- }
- }
特点:
1 建造者定义了建造产品所需的各个步骤;
2 指挥者通过调用建造者, 按既定的步骤建造对象.
抽象建造者通过把产品的生产过程分解为不同的步骤, 从而使具体建造者在具体的建造步骤上具有更对弹性. 从而创造出不同表示的产品。
举一例:
比如建造一个人: 抽象建造者把造人的过程分解为: 建造头部,驱赶, 四肢, 血液系统, 呼吸系统..... 那么不同的具体建造者可以根据客户需要, 建造出不同的人来: 有的人躯体胖, 有的人手臂长, 有的人A型血, 有的人B型血...... 这是构造函数无法提供的弹性。