[关闭]
@Tyhj 2018-09-06T02:38:37.000000Z 字数 1666 阅读 599

建造者模式

设计模式


建造者模式也被称为生成器模式,它是创建一个复杂对象的创建型模式,其将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。

定义:

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

屏幕快照 2018-08-01 下午3.28.21.png-30.3kB

建造者模式的角色:

  • Director:导演类,负责安排已有模块的顺序,然后通知Builder开始建造。
  • Builder:抽象Builder类,规范产品的组建,一般由子类实现。
  • ConcreteBulider:具体建造者,实现抽象Builder类定义的所有方法,并且返回一个组建好的对象。
  • Product:产品类

举个栗子

创建产品类:
DIY组装计算机例子,计算机有三个部件:CPU、主板、内存,并在里面提供了3个方法分别用来设置CPU、主板和内存:

  1. public class Computer {
  2. private String CPU;
  3. private String mMainboard;
  4. private String mRam;
  5. public void setCPU(String CPU) {
  6. this.CPU = CPU;
  7. }
  8. public void setmMainboard(String mMainboard) {
  9. this.mMainboard = mMainboard;
  10. }
  11. public void setmRam(String mRam) {
  12. this.mRam = mRam;
  13. }
  14. }

创建Builder类规范产品的组建
有一套组建计算机方法的模板,是一个抽象类Builder类,提供了安装部件和组成计算机的方法:

  1. public abstract class Builder {
  2. public abstract void buildCpu(String cpu);
  3. public abstract void buildMainboard(String minaboard);
  4. public abstract void buildRam(String ram);
  5. public abstract Computer create();
  6. }

实现抽象的Builder类,MoonComputerBuilder类用于组装计算机:

  1. public class MoonComputerBuilder extends Builder {
  2. private Computer computer = new Computer();
  3. @Override
  4. public void buildCpu(String cpu) {
  5. computer.setCPU(cpu);
  6. }
  7. @Override
  8. public void buildMainboard(String minaboard) {
  9. computer.setmMainboard(minaboard);
  10. }
  11. @Override
  12. public void buildRam(String ram) {
  13. computer.setmRam(ram);
  14. }
  15. @Override
  16. public Computer create() {
  17. return computer;
  18. }
  19. }

用导演类来同一组装过程

  1. public class Direcror {
  2. private String CPU;
  3. private String mMainboard;
  4. private String mRam;
  5. public void setCPU(String CPU) {
  6. this.CPU = CPU;
  7. }
  8. public void setmMainboard(String mMainboard) {
  9. this.mMainboard = mMainboard;
  10. }
  11. public void setmRam(String mRam) {
  12. this.mRam = mRam;
  13. }
  14. }

代码调用

  1. public class CreateComputer{
  2. public static void main(String args[]){
  3. Builder builder=new MoonComputerBuilder();
  4. Direcror direcror=new Direcror(builder);
  5. direcror.createComputer("i7-7700k","华硕主板","三星 DDR4");
  6. }
  7. }

建造者模式的场景和优缺点

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注