Android技术知识Android开发经验谈Android开发

设计模式(三)建造者模式

2017-12-12  本文已影响36人  Arnold_J

一、建造者模式简介

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

2.简介
建造者模式(builder)是创建一个复杂对象的创建型模式,将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。
例如我们要DIY一个台式机电脑,我们找到DIY商家,我们可以要求这台电脑的cpu或者主板或者其他的部件都是什么牌子的什么配置的,这些部件是我们可以根据我们的需求来变化的,但是这些部件组装成电脑的过程是一样的,我们不需要知道这些部件是怎样组装成电脑的,我们只需要提供部件的牌子和配置就可以了。对于这种情况我们就可以采用建造者模式,将部件和组装过程分离,使得构建过程和部件都可以自由拓展,两者之间的耦合也降到最低。

建造者模式结构图

二、建造者模式简单实现

1.创建产品类
我要组装一台电脑,电脑被抽象为Computer类,它有三个部件:CPU 、主板和内存。并在里面提供了三个方法分别用来设置CPU 、主板和内存:

public class Computer {
    private String mCpu;
    private String mMainboard;
    private String mRam;
    public void setmCpu(String mCpu) {
        this.mCpu = mCpu;
    }
    public void setmMainboard(String mMainboard) {
        this.mMainboard = mMainboard;
    }
    public void setmRam(String mRam) {
        this.mRam = mRam;
    }
}

2.创建Builder类规范产品的组建
商家组装电脑有一套组装方法的模版,就是一个抽象的Builder类,里面提供了安装CPU、主板和内存的方法,以及组装成电脑的create方法:

public abstract class Builder {
    public abstract void buildCpu(String cpu);
    public abstract void buildMainboard(String mainboard);
    public abstract void buildRam(String ram);
    public abstract Computer create();
}

商家实现了抽象的Builder类,MoonComputerBuilder类用于组装电脑:

public class MoonComputerBuilder extends Builder {
    private Computer mComputer = new Computer();
    @Override
    public void buildCpu(String cpu) {
        mComputer.setmCpu(cpu);
    }
    @Override
    public void buildMainboard(String mainboard) {
        mComputer.setmMainboard(mainboard);
    }
    @Override
    public void buildRam(String ram) {
        mComputer.setmRam(ram);
    }
    @Override
    public Computer create() {
        return mComputer;
    }
}

3.用Dirextor指挥者类来统一组装过程
商家的指挥者类用来规范组装电脑的流程规范,先安装主板,再安装CPU,最后安装内存并组装成电脑:

public class Direcror {
    Builder mBuild=null;
    public Direcror(Builder build){
        this.mBuild=build;
    }
    public Computer CreateComputer(String cpu,String mainboard,String ram){
        //规范建造流程
       this.mBuild.buildMainboard(mainboard);
       this.mBuild.buildCpu(cpu);
       this.mBuild.buildRam(ram);
       return mBuild.create();
    }
}

4.客户端调用指挥者类
最后商家用指挥者类组装电脑。我们只需要提供我们想要的CPU,主板和内存就可以了,至于商家怎样组装的电脑我们无需知道。

public class CreatComputer {
    public static void main(String[]args){
        Builder mBuilder=new MoonComputerBuilder();
        Direcror mDirecror=new Direcror(mBuilder);
        //组装电脑
        mDirecror.CreateComputer("i7-6700","华擎玩家至尊","三星DDR4");
    }
}

三、使用建造者模式的场景和优缺点

1.使用场景

2.优缺点

Arno 注:对于 Android 开发而言,有时候用到建造者模式,也有可能是为了减少重复代码,或者隐藏异常捕捉,或者方便理解。例如,JsonBuilder、Dialog.Builder 等等,通常做这种用途时,我们不会有 Dirextor 类,而是添加了一个 build 方法,返回我们构造好的对象。


转自: 刘望舒 - 设计模式(三)建造者模式

上一篇 下一篇

猜你喜欢

热点阅读