美文网首页Java基础
设计模式2.6 建造者模式

设计模式2.6 建造者模式

作者: 卢卡斯哔哔哔 | 来源:发表于2018-11-30 11:57 被阅读3次

点击进入我的博客

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。它提供了一种创建对象的最佳方式。

2.6.1 建造者结构

建造者模式
  • Builder(抽象建造者):可以是一个抽象类或一个接口,规范产品对象的各个组成部分的建造。
  • ConcreteBuilder(具体建造者):它实现了Builder接口,给出一步一步的创建产品实例的操作,然后提供一个方法返回创建好的复杂产品对象。
  • Product(产品角色):如果是单个产品类,那么就是一个具体的产品;如果是多个产品类,那么就是一个抽象的类或接口。
  • ConcreteProduct(具体产品):当多个产品类时,继承抽象Product,也就是具体的要建造的复杂对象。值得注意的是,这些产品类不一定会有共同的接口。
  • Director(指挥者):它复杂安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在Director的方法中调用建造者对象的部件构造与装配方法,完成建造复杂对象的任务。

2.6.2 建造者模式细节

主要目的

一个产品通常有不同的组成成分作为产品的零件,不同的产品可以有不同的零件,建造产品的过程是建造零件的过程。建造者模式将产品的结构和产品的零件建造过程对外隐藏起来,把对建造过程进行指挥的责任和具体建造零件的责任分割开来,达到责任划分和封装的目的。

解决问题

主要解决在开发过程中,有时需要创建一个复杂对象,通常由多个部分的子对象构成;由于复杂对象的多样性,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法需要保持稳定。

使用场景
  1. 肯德基的产品很多,需要组成“套餐”。
  2. Java的StringBuilder
省略角色
  1. 省略抽象建造者:如果只需要一个具体建造者,则可以省略抽象建造者。
  2. 省略指挥者:可以在具体建造者里边直接构造具体产品。
  3. 合并具体建造者和具体产品:在产品本身就是自己的建造者。
优点
  1. 良好的封装性
  2. 具体建造类之间独立,扩展性好
缺点
  • 如果产品比较多,可能会有很多的建造类。

2.6.3 肯德基套餐案例

public class Waiter {
    public static void main(String[] args) {
        KFCBuilder builder = new MexicanTwisterBuilder();
        builder.buildBeverage();
        builder.buildHamburger();
        builder.buildSnack();
        KFCCombo combo = builder.getCombo();
    }
}

// 套餐接口
abstract class KFCCombo {
    private String hamburger;
    private String beverage;
    private String snack;
    // getters & setters
}
// 墨西哥鸡肉卷套餐
class MexicanTwisterCombo extends KFCCombo {}

// Builder接口
interface KFCBuilder {
    void buildHamburger();
    void buildBeverage();
    void buildSnack();
    KFCCombo getCombo();
}

class MexicanTwisterBuilder implements KFCBuilder {
    private KFCCombo combo = new MexicanTwisterCombo();
    @Override
    public void buildHamburger() {
        combo.setHamburger("Mexican Twister");
    }

    @Override
    public void buildBeverage() {
        combo.setBeverage("Pepsi Cola");
    }

    @Override
    public void buildSnack() {
        combo.setSnack("Hot Wings");
    }

    @Override
    public KFCCombo getCombo() {
        return combo;
    }
}

2.6.4 builder内部类

如果一个类有很多属性,此时为此类写一个Builder内部类,来辅助建造该类。

class Phone {
    private String screen;
    private String camera;
    private String cpu;
    private String battery;

    public static Builder builder() {
        return new Builder();
    }

    public static class Builder {
        private Phone phone = new Phone();

        public Builder screen(String screen) {
            phone.screen = screen;
            return this;
        }

        public Builder camera(String camera) {
            phone.camera = camera;
            return this;
        }

        public Builder cpu(String cpu) {
            phone.cpu = cpu;
            return this;
        }

        public Builder battery(String battery) {
            phone.battery = battery;
            return this;
        }

        public Phone build() {
            return phone;
        }
    }
}

2.6.5 与其他模式的关系

抽象工厂模式
  • 抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式则是不需要关心构建过程,只关心什么产品由什么工厂生产即可。
  • 而建造者模式则是要求按照规定建造产品,它的主要目的是通过组装零配件而产生一个新产品。
  • 换言之,抽象工厂模式在更加具体的维度上,而建造模式在一个更加宏观的维度上。
策略模式
  • 事实上建造模式是策略模式的一种特殊情况,这两种模式的却别在于用意不同。
  • 建造模式适应于为客户端一点一点地建造新的对象。
  • 策略模式的目的是为算法提供抽象的接口。

相关文章

  • 设计模式2.6 建造者模式

    点击进入我的博客 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。它提...

  • Retrofit

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

  • Android中涉及的模式

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

  • 设计模式之建造者模式

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

  • 设计模式 - 目录

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

  • 设计模式之建造者模式

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

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

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

  • 【Java设计模式】--建造者模式

    建造者模式(Bulider模式) 一、什么是建造者模式 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示...

  • 建造者设计模式-Builder design pattern

    建造者设计模式是创建型设计模式的一种。创建型设计模式处理对象创建的问题。 建造者设计模式,用来构建需要经过若干个建...

  • 设计模式

    Java 设计模式情景分析 ——单例模式 Java 设计模式情景分析——建造者模式 Java 设计模式情景分析——...

网友评论

    本文标题:设计模式2.6 建造者模式

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