Java 杂谈

Java设计模式之建造者模式

2018-11-16  本文已影响0人  giants_one

前言

建造者模式也被称为生成器模式,它是创建一个复杂对象的创建型模式,它将构建复杂的对象过程和它的部件解耦,使构建过程和部件的表示分离开来。例如我们自己要
DIY 一台台式计算机。我们找到 DIY 商家,这是我们要求这台计算机的 CPU、主板、或者其他部件都是什么牌子、什么配置的,这些部件是可以根据我们自己的需求来变化的。我们只需要提供相关部件的牌子和配置就可以了。对于这种情况我们的可以采用建造者模式,将部件和组装过程分离,使得构建过程和部件都可以自由拓展,两者之间的耦合也降到最低。

定义

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

使用场景

角色

建筑者模式的简单实现

  1. 创建产品类:我们要组装一台计算机,计算机被抽象为 Computer 类,它有3个部件:CPU、主板和内存,并在里面提供3个方法分别用来设置 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;
    }
}
  1. 创建Builder类规范产品的创建:商家组装计算机有一套组装方法的模版,就是一个抽象的 Builder 类,其里面提供了安装 CPU、主板和内存的方法,以及组装成计算机的 creact 方法。
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();
}
  1. 创建组装计算机类:商家实现了抽象的 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;
    }
}
  1. 创建导演类:统一管理组装过程。商家就是导演类用来规范组装计算机的流程规范,先安装主板,在安装 CPU ,最后安装内存并组装完成计算机:
public class Director {
    Builder mBuild = null;
    public Director(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();
    }
}
  1. 客户端调用导演类:最后商家用导演类组装计算机。我们只需要提供自己想要的 CPU 、主板和内存就可以了,至于商家怎样组装计算机我们无须知道。
public class CreateComputer {
    public static void main(String[] args){
        Builder mBuilder = new MoonComputerBuilder();
        Director mDirector = new Director(mBuilder);
        //组装计算机
        mDirector.CreateComputer("i7-6700", "华擎玩家至尊", "三星 DDR4");
    }
}

优缺点

优点

缺点

上一篇 下一篇

猜你喜欢

热点阅读