美文网首页
设计模式 - 建造者模式

设计模式 - 建造者模式

作者: yufw | 来源:发表于2022-01-27 19:43 被阅读0次

定义

建造者模式:将一个复杂的对象的 生成,拆解成 多个 小的对象的构造,从而达到 由于各个小部件的构造不同最终生成的对象 灵活可变的效果;(对象的组成是不变的,具体的组成部分内部可以灵活变化)

优缺点

优点

  • 对象的构建和展示 分离
  • 不同的业务场景 使用的 建造者 不一样,独立 解耦;扩展性好
  • 调用者 不需要了解 对象的具体建造过程,交给具体的建造者就行;对调用者更友好

缺点

  • 对象的内部构成必须一样;有一定的局限性
  • 如果 随着 业务逻辑的迭代,对象组成有变化;所有的 关联建造者实现 都需要进行修改,成本较大

适用场景

  • 类复杂性较高,且需要的 属性值 变化较大

主要组成结构

产品:最终要生成的对象实例(包含多个属性的 复杂对象)
抽象建造者:包含 构造 各个属性对象的 抽象方法及返回产品的 抽象类或接口
具体建造者:实现产品对象 各个属性 实例创建逻辑
调度者:调用 具体建造者类 生成复杂对象的 逻辑类


类图

image.png

代码实现

public class BuilderPattern {
    public static void main(String[] args) {
        Builder builder = new RealBuilder();
        Salesperson director = new Salesperson(builder);
        Meal product = director.construct();
        product.ok();
    }

}


/**
 * 需求:
 * 麦当劳点餐
 * 一个汉堡、一杯可乐、一个鸡米花
 */

/**
 * product 产品 套餐
 */
class Meal {

    private String stapleFood;
    private String drink;
    private String snack;

    public Meal() {
    }

    public String getStapleFood() {
        return stapleFood;
    }

    public void setStapleFood(String stapleFood) {
        this.stapleFood = stapleFood;
    }

    public String getDrink() {
        return drink;
    }

    public void setDrink(String drink) {
        this.drink = drink;
    }

    public String getSnack() {
        return snack;
    }

    public void setSnack(String snack) {
        this.snack = snack;
    }

    public void ok(){
        System.out.println(drink);
        System.out.println(snack);
        System.out.println(stapleFood);
        System.out.println("上菜");
    }
}

/**
 * Director 调用者 销售前台
 */
class Salesperson {

    private final Builder builder;

    public Salesperson(Builder builder) {
        this.builder = builder;
    }

    public Meal construct(){
        builder.buildDrink();
        builder.buildStapleFood();
        builder.buildSnack();
        return builder.getResult();
    }

}

/**
 * 大厨 生产者
 */
abstract class Builder{

    Meal product = new Meal();

    public abstract void buildStapleFood();
    public abstract void buildDrink();
    public abstract void buildSnack();

    public Meal getResult(){
        return product;
    }

}

/**
 * 实际建造者
 */
class RealBuilder extends Builder{

    @Override
    public void buildStapleFood() {
        product.setStapleFood("汉堡做好了");
    }

    @Override
    public void buildDrink() {

        product.setDrink("可乐做好了");
    }

    @Override
    public void buildSnack() {
        product.setSnack("鸡米花做好了");
    }

}

result

可乐做好了
鸡米花做好了
汉堡做好了
上菜

相关文章

  • Retrofit

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

  • Android中涉及的模式

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

  • 设计模式之建造者模式

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

  • 设计模式 - 目录

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

  • 设计模式之建造者模式

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

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

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

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

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

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

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

  • 设计模式

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

  • 一篇文章搞懂设计模式

    目录 面向对象的七种设计原则建造者模式命令模式享元模式模板方法模式责任链模式建造者模式原型模式观察者模式策略模式与...

网友评论

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

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