美文网首页
建造者模式

建造者模式

作者: FredWhite | 来源:发表于2019-11-07 22:33 被阅读0次

定义

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

使用场景

  1. 相同的方法,不同的执行顺序,产生不同的事件结果时。
  2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
  3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用。非常适合 Builder 模式。
  4. 当初始化一个对象特别复杂,如参数多,而且很多参数都具有缺省值时。

实现方式

Product 角色(抽象类)

// 计算机抽象类,即 Product 角色
public abstract class Computer {
    private String mCpu;
    private String mDisplayCard;
    private String mMemory;
    private String mHardDisk;
    private String mOS;

    protected Computer() {  }
    // 设置 CPU
    public void setCpu(String cpu) {
        this.mCpu = cpu;
    }
    // 设置 显卡
    public void setDisplayCard(String displayCard) {
        this.mDisplayCard = displayCard;
    }
    // 设置 内存
    public void setMemory(String memory) {
        this.mMemory = memory;
    }
    // 设置 硬盘
    public void setHardDisk(String hardDisk) {
        this.mHardDisk = hardDisk;
    }
    // 设置 操作系统
    public abstract void setOS();

    @Override
    public String toString() {
        return "Computer [CPU=" + mCpu + ", 显卡=" + mDisplayCard + ", 内存=" + mMemory + ", 硬盘=" + mHardDisk + ", 操作系统=" + mOS + "]";
    }
}

Product 角色(具体实现类)

public class HP extends Computer {
    protected HP() {  }
    
    @Override
    public void setOS() {
        mOS = "Windows 10 旗舰版";
    }
}

Builder 角色(抽象类)

public abstract class Builder {
    // 构建 Cpu
    public abstract void buildCpu(String cpu);
    // 构建 显卡
    public abstract void buildDisplayCard(String displayCard);
    // 构建 内存
    public abstract void buildMemory(String memory);
    // 构建 硬盘
    public abstract void buildHardDisk(String hardDisk);
    // 构建 操作系统
    public abstract void buildOS();
    // 创建(组装)Computer
    public abstract Computer create();
}

Builder 角色(具体实现类)

public class HPBuilder extends Builder {
    private Computer computer = new HP();

    @Override
    public void buildCpu(String cpu) {
        computer.setCpu(cpu);
    }

    @Override
    public void buildDisplayCard(String displayCard) {
        computer.setDisplayCard(displayCard);
    }

    @Override
    public void buildMemory(String memory) {
        computer.setMemory(memory);
    }

    @Override
    public void buildHardDisk(String hardDisk) {
        computer.setHardDisk(hardDisk);
    }

    @Override
    public void buildOS() {
        computer.setOS();
    }

    @Override
    public Computer create() {
        return computer;
    }

}

Director 角色,负责构造 Computer

public class Director {
    Builder mBuilder = null;
    public Director(Builder builder) {
        this.mBuilder = builder;
    }
    
    // 构建 Builder 对象
    public void construct(String cpu, String displayCard, String memory, String hardDisk) {
        mBuilder.buildCpu(cpu);
        mBuilder.buildDisplayCard(displayCard);
        mBuilder.buildMemory(memory);
        mBuilder.buildHardDisk(hardDisk);
        mBuilder.buildOS();
    }
}

测试

public class BuilderTest {
    public static void main(String[] args) {
        // Builder
        Builder builder = new HPBuilder();
        // Director
        Director director = new Director(builder);
        // 构建封装过程,i7\GTX1080\16G\512G SSD
        director.construct("Intel i7 8700", "微星 GeForce GTX1080 Ti", "Kingston 16G", "Western Digital 500GB SSD");
        // 构建 & 输出信息
        System.out.println("Computer Info:" + builder.create().toString());
    }
}

注意

实际应用场景中,经常会省略掉 Director 这个角色,直接通过 Builder 来进行对象的组装,并通过链式进行调用。参见 AlertDialog.Builder 以及 Universal-Image-Loader 的初始化配置代码。

相关文章

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 设计模式(4) 建造者模式

    什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

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

    建造者模式 什么是建造者模式? 建造者模式属于创建型模式的一员,可以控制对象的实例化过程。建造者模式简化了复杂对象...

  • 建造者模式

    一、建造者模式介绍 二、建造者模式代码实例

  • 建造者模式

    建造者模式 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和...

  • 建造者模式:深入理解建造者模式 ——组装复杂的实例

    目录: 一 建造者模式介绍 1.1 定义 1.2 为什么要用建造者模式(优点)? 1.3 哪些情况不要用建造者模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 一、设计模式(构建模式)——03建造模式与原型模式

    建造者模式 建造型模式用于创建过程稳定,但配置多变的对象。 建造模式的实现要点: 在建造者模式中,指挥者是直接与客...

  • 创建型模式:建造者模式

    个人公众号原文:创建型模式:建造者模式 五大创建型模式之四:建造者模式。 简介 姓名 :建造者模式 英文名 :Bu...

网友评论

      本文标题:建造者模式

      本文链接:https://www.haomeiwen.com/subject/ymvvbctx.html