学习总结录 学习总结录
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
  • 设计模式

    • 设计模式-工厂模式
    • 设计模式-抽象工厂模式
    • 设计模式-单例模式
    • 设计模式-建造者模式
      • 设计模式-建造者模式
      • 案例
      • 参考
    • 设计模式-原型模式
    • 设计模式-适配器模式
    • 设计模式-桥接模式
    • 设计模式-组合模式
    • 设计模式-外观模式
    • 设计模式-装饰模式
    • 设计模式-享元模式
    • 设计模式-代理模式
    • 设计模式-职责链模式
    • 设计模式-命令模式
    • 设计模式-迭代器模式
    • 设计模式-中介者模式
    • 设计模式-观察者模式
    • 设计模式-状态模式
    • 设计模式-策略模式
  • 算法思想

  • 编码规范

  • 技术思想
  • 设计模式
旭日
2023-03-27
目录

设计模式-建造者模式

# 设计模式-建造者模式

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

就好比我们装修房间,房间有很多不同组件去搭建。现在我们并不关心每个组件是如何装修的,而是关心房间整体。所以这时候我们只需要找一个设计师来设计房间(指挥者),然后这个指挥者给不同组件指定对应的建造者进行创建。

image-20220314084509892

通过这种方式我们就把这个复杂的房间拆分成各个部分,各个部分由对应的建造者去建设。

使用环境:

如果创建复杂对象并希望系统具备很好的灵活性和可扩展性可以考虑使用建造者模式。

优点:

  • 建造者独立,易扩展。

  • 便于控制细节风险。

缺点:

  • 需要生成的对象具有复杂的内部结构。
  • 需要生成的对象内部属性本身相互依赖。

与生产者模式的区别在于:建造者模式更加关注与零件装配的顺序

# 案例

image-20220314092420531

食物抽象类:

public interface Item {

    /**
     * 名称
     * @return String
     */
    public String name();

    /**
     * 打包方式
     * @return String
     */
    public Packing packing();


    /**
     * 单价
     * @return String
     */
    public float price();
}

包装抽象类:

public interface Packing {

    /**
     * 包装方式
     * @return String
     */
    public String pack();
}

包装具体实现:

public class Bottle implements Packing{

    @Override
    public String pack() {
        return "瓶装";
    }
}

public class Wrapper implements Packing {

    @Override
    public String pack() {
        return "纸包装";
    }
}

汉堡抽象类:

public abstract class Burger implements Item {

    @Override
    public Packing packing() {
        return new Wrapper();
    }


    /**
     * 汉堡的价格
     * @return
     */
    @Override
    public abstract float price();
}

冷饮抽象类:

public abstract class ColdDrink implements Item {

    @Override
    public Packing packing() {
        return new Bottle();
    }

    /**
     * 冰镇水价格
     * @return
     */
    @Override
    public abstract float price();
}

鸡肉堡实现类:

public class ChickenBurger extends Burger {

    @Override
    public float price() {
        return 50.5f;
    }

    @Override
    public String name() {
        return "鸡肉堡";
    }
}

可乐实现类:

public class Coke extends ColdDrink {

    @Override
    public float price() {
        return 30.0f;
    }

    @Override
    public String name() {
        return "可乐";
    }
}

食物建造者:

public class MealBuilder {

    /**
     * 准备饮料
     * @return
     */
    public Meal prepareDrink() {
        Meal meal = new Meal();
        meal.addItem(new Coke());
        return meal;
    }

    /**
     * 准备汉堡
     * @return
     */
    public Meal prepareBurger() {
        Meal meal = new Meal();
        meal.addItem(new ChickenBurger());
        return meal;
    }
}

具体实现:

public class BuilderPatternDemo {
    public static void main(String[] args) {
        MealBuilder mealBuilder = new MealBuilder();

        Meal vegMeal = mealBuilder.prepareDrink();
        System.out.println("Drink");
        vegMeal.showItems();
        System.out.println("Total Cost: " +vegMeal.getCost());

        Meal nonVegMeal = mealBuilder.prepareBurger();
        System.out.println("\n\nBurger");
        nonVegMeal.showItems();
        System.out.println("Total Cost: " +nonVegMeal.getCost());
    }
}

可以感受到整个过程和工厂模式十分相似,只是在细化组件内部的过程中建造者模式更为方便。

# 参考

设计模式入门实践 (opens new window)

#设计模式
上次更新: 2024/06/29, 15:13:44
设计模式-单例模式
设计模式-原型模式

← 设计模式-单例模式 设计模式-原型模式→

最近更新
01
基础概念
10-31
02
Pytorch
10-30
03
Numpy
10-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 旭日 | 蜀ICP备2021000788号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式