美文网首页Java 杂谈
设计模式快速学习(四)建造者模式

设计模式快速学习(四)建造者模式

作者: FantJ | 来源:发表于2018-08-15 20:22 被阅读9次

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

优点
  1. 建造者独立,易扩展。
  2. 便于控制细节风险。
缺点
  1. 产品必须有共同点,范围有限制。
  2. 如内部变化复杂,会有很多的建造类。

角色介绍

建造者模式有四个角色

  1. Product(产品类):要建造的对象
  2. builder(抽象建造者):规范建造对象的组成成分,但不具体创建。
  3. ConcreteBuilder(具体建造者):根据抽象建造者规范的组成成分来具体创建,并返回建造对象(产品类)实例。
  4. Director(指导者):调用具体建造者来建造各个部分,指导者只需要关注建造顺序,而不需要关注各成分(产品类属性)具体信息。

执行顺序:
Director->builder->ConcreteBuilder
最后返回Product

产品类

要建造的对象

public class Phone {
    /**
     * 处理器
     */
    private String cpu;
    /**
     * 屏幕
     */
    private String screen;
    /**
     * 相机
     */
    private String camera;

getter and setter...

抽象建造者

规范建造对象的组成成分,但不具体创建。

public interface PhoneBuilder {
    void buildScreen();
    void buildCpu();
    void buildCamera();

    Phone buildPhone();
}

具体建造者

根据抽象建造者规范的组成成分来具体创建,并返回建造对象(产品类)实例。

public class ConcreteBuilder implements PhoneBuilder{
    public Phone phone;
    public ConcreteBuilder() {
        phone = new Phone();
    }

    @Override
    public void buildScreen() {
        phone.setScreen("三星OLED屏幕");
    }

    @Override
    public void buildCpu() {
        phone.setCpu("骁龙845");
    }

    @Override
    public void buildCamera() {
        phone.setCamera("SONY");
    }

    @Override
    public Phone buildPhone() {
        return this.phone;
    }
}

指导者

调用具体建造者来建造各个部分,指导者只需要关注建造顺序,而不需要关注各成分(产品类属性)具体信息。

public class Direct {
    public Phone constructMi8(PhoneBuilder phoneBuilder){
        phoneBuilder.buildCamera();
        phoneBuilder.buildCpu();
        phoneBuilder.buildScreen();
        return phoneBuilder.buildPhone();
    }
}

测试

public class Main {
    public static void main(String[] args) {
        Direct direct = new Direct();
        Phone phone = direct.constructMi8(new ConcreteBuilder());
        System.out.println(phone);
    }
}
Phone{cpu='骁龙845', screen='三星OLED屏幕', camera='SONY'}

与抽象工厂模式区别

建造者模式和抽象工厂模式是很像的(都是创建产品类实例),建造者模式比它多了一个指导者的角色,所以它们的最大区别在于

建造者模式只需要关注产品类建造的顺序,而不需要关注其具体信息。

而抽象工厂模式需要关注其具体信息去创建产品类。

抽象工厂模式顺风车:设计模式快速学习(二)抽象工厂模式

相关文章

  • 设计模式快速学习(四)建造者模式

    建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于...

  • Java 十一种设计模式深入理解

    目录一、工厂设计模式二、抽象工厂模式三、单例设计模式四、建造者(Builder)模式五、原型模式六、适配器设计模式...

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • 设计模式(十四)中介者模式

    相关文章 设计模式(一)设计六大原则设计模式(二)单例模式的七种写法设计模式(三)建造者模式设计模式(四)简单工厂...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

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

  • 30 Java设计模式系列-建造者(Build)模式

    建造者(Build)模式 建造者(Build)模式是非常常见的设计模式之一,写个笔记,记录一下我的学习过程和心得。...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 1. 模式定义 建造者模式又可以成为生成器模式,它属于对象创建型模式。建造者模式将一个复杂对...

  • java设计模式--建造者模式

    java设计模式--建造者模式 建造者模式定义 建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有...

网友评论

    本文标题:设计模式快速学习(四)建造者模式

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