Java设计模式之Builder模式

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

使用场景
1.相同的方法,不同的执行顺序,产生不同的事件结果时
2.多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时
3.产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适

Java设计模式之Builder模式_第1张图片

Product产品类:产品的抽象类。
Builder:抽象类,规范产品的组建,一般是由子类实现具体的组件过程。
ConcreteBuilder:具体的构建器.
Director:统一组装过程(可省略)。
示例:

//产品抽象类 提供了3个抽象方法
public abstract class Mobile {
    protected int mCpuCore=1;
    protected int mRamSize=0;
    protected String mOs="IOS";

    protected Mobile(){
    }

    //设置CPU核心数
    public abstract void setCPU(int core);
    //设置内存
    public abstract void setRAM(int gb);
    //设置操作系统
    public abstract void setOs(String os);

    @Override
    public String toString() {
        return "Mobile [mCpuCore=" + mCpuCore + ", mRamSize=" + mRamSize + ", mOs=" + mOs + "]";
    }
}

//苹果手机 产品抽象类Mobile的具体实现类
public class AppleMobile extends Mobile{
    protected AppleMobile(){

    }

    @Override
    public void setCPU(int core) {
        mCpuCore=core;
    }

    @Override
    public void setRAM(int gb) {
        mRamSize=gb;
    }

    @Override
    public void setOs(String os) {
        mOs=os;
    }
}

//Builder抽象类
public abstract class Builder {
    // 设置CPU核心数
    public abstract void buildCPU(int core);

    // 设置内存
    public abstract void buildRAM(int gb);

    // 设置操作系统
    public abstract void buildOs(String os);

    //创建Mobile
    public abstract Mobile create();
}

//Builder类的具体实现类,里面实现了Builder类里面的抽象方法,并且新建了一个产品AppleMobile对象
public class AppleMobileBuilder extends Builder{
    private Mobile mAppleMobile=new AppleMobile();
    @Override
    public void buildCPU(int core) {
        mAppleMobile.setCPU(core);
    }

    @Override
    public void buildRAM(int gb) {
        mAppleMobile.setRAM(gb);
    }

    @Override
    public void buildOs(String os) {
        mAppleMobile.setOs(os);
    }

    @Override
    public Mobile create() {
        return mAppleMobile;
    }
}

//产品的组装过程 产品组装需要拥有产品对象 而产品对象是在Builder的实现类AppleMobileBuilder里面创建出来的AppleiMobile对象,所以此处构造需要传入Builder对象。
public class Director {
    Builder mBuilder=null;

    public Director(Builder builder){
        mBuilder=builder;
    }

    public void construct(int cpu, int ram, String os) {
        mBuilder.buildCPU(cpu);
        mBuilder.buildRAM(ram);
        mBuilder.buildOs(os);
    }
}

//测试类
public class Test {
    public static void main(String[] args) {
        //构建器
        Builder builder=new AppleMobileBuilder();
        //Director
        Director director=new Director(builder);
        //封装构建过程 4核 内存2G IOS系统
        director.construct(4, 2, "IOS");
        System.out.println("Mobile Info"+builder.create());
    }
}

效果如下:

优点
1.良好的封装性, 使用建造者模式可以使客户端不必知道产品内部组成的细节
2.建造者独立,容易扩展
3.在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到

缺点
1.会产生多余的Builder对象以及Director对象,消耗内存
2.对象的构建过程暴露

参考:
Android 设计模式源码解析

你可能感兴趣的:(设计模式,Builder模式)