设计模式之建造者模式【Builder Pattern】

建造者模式(Builder)主要用来构建复杂的对象,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构建流程。

1、定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

2、使用场景

  1. 相同的方法,不同的执行顺序,产生不同的事件结果。
  2. 多个部件或零件,都可以装配到一个对象中,但产生的结果不同。
  3. 产品类非常复杂,或者产品类中的调用顺序不同产生不同的结果。
  4. 当初始化一个对象特别复杂时,如参数多。

3、UML图

这里写图片描述

  • Product:产品类
  • Builder:建造器接口,定义创建一个Product对象所需的各个部件的操作。
  • ConreteBuilder:具体的建造者
  • Director:指导者,统一组装过程。

4、示例代码

/**
 * 待构建产品
 */
public class Product {

    String partA, partB, partC;

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }

    @Override
    public String toString() {
        return "Product [partA=" + partA + ", partB=" + partB + ", partC="
                + partC + "]";
    }
}

/**
 * 建造器接口,定义创建一个产品对象所需的各个部件的操作
 */
public interface Builder {

    void buildPartA();

    void buildPartB();

    void buildPartC();

    public Product build();
}

/**
 * 具体构建产品的建造器
 */
public class ConcreteBuilder implements Builder {

    //建造器最后构建的产品对象
    private Product mProduct = new Product();

    @Override
    public void buildPartA() {
        System.out.println("buildPartA");
        mProduct.setPartA("partA");
    }

    @Override
    public void buildPartB() {
        System.out.println("buildPartB");
        mProduct.setPartB("partB");
    }

    @Override
    public void buildPartC() {
        System.out.println("buildPartC");
        mProduct.setPartC("partC");
    }

    /**
     * 获取建造器最后构建的产品对象
     * 
     * @return
     */
    public Product build() {
        return mProduct;
    }
}

/**
 * 构建指导者,指导使用建造器的接口来构建产品对象
 */
public class Director {
    private Builder mBuilder;

    public Director(Builder builder) {
        super();
        this.mBuilder = builder;
    }

    /**
     * 指导建造器构建最终的产品对象
     */
    public void construct() {
        mBuilder.buildPartA();
        mBuilder.buildPartB();
        mBuilder.buildPartC();
    }
}

//测试
public class Test {

    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        //封装了具体的构建过程
        director.construct();
        Product product = builder.build();
        System.out.println("最终的产品:" + product.toString());
    }
}

测试结果:
这里写图片描述

在Android源码中最常用到Builder模式就是AlertDialog.Builder,Builder模式可以避免过多的setter方法。比较常见的实现形式是通过调用链实现,使代码更简洁、易懂。

猜你喜欢

转载自blog.csdn.net/iluojie/article/details/80373086