建造者模式详解:建造随意搭配的肯德基套餐

这篇具有很好参考价值的文章主要介绍了建造者模式详解:建造随意搭配的肯德基套餐。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概要

建造者模式(Builder Pattern)是五种创建型设计模式之一,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这句话怎么理解呢:一个对象的构建过程本质上就是这个对象包含的所有成员属性的构建过程,如果对象的属性非常多,属性本身组成复杂,甚至属性之间存在关联,那么该类的构建过程就显得很麻烦,如果所有代码都定义在本类中,代码会显得很臃肿甚至条理不清,所以我们可以将类的属性构建过程独立剥离出来,用单独的一个类去承载,这个类就是建造者类

建造者模式一般包含以下角色:

  • 产品角色:要创建的复杂对象,一般包含多个组成部分,一般提供静态builder()方法来生成建造者。
  • 建造者类: 用于构造复杂对象,灵活创建对象的各个组成部分,一般包含build()方法用于返回最终对象。可以提炼抽象层。
  • 指挥者 :非必须角色,调用建造者的方法控制复杂对象构建,主要用于封装构建过程,进行代码复用。

优点

  • 向客户端隐藏了复杂对象的构建细节。
  • 将产品本身和产品的创建过程进行解耦,可以更加精细地控制产品的创建过程,使得相同的创建过程可以创建不同的产品对象。
  • 通过引入指挥者,可以实现构建过程的复用。
  • 建造者独立,易于扩展,同时提高代码的可读性和可维护性。

缺点

  • 建造者模式增加了类的数量,所以增加了系统的复杂性。
  • 产品的组成发生变化时,建造者类需要同步修改。

适用场景

  • 需要生成的对象具有复杂的内部结构,有很多属性。
  • 需要生成的对象内部属性之间存在一定的依赖关系或约束条件。
  • 需要分离对象和对象的创建过程。

二、实现案例

构建一份肯德基套餐

假设我们需要构建一份肯德基套餐,一份套餐至少包含n份汉堡,n份小食,n份饮料。那么这样一份套餐的组合方式就有很多种了,如单人套餐,双人套餐,全家桶,任意搭配等。接下来我们使用建造者模式来创建这样的一份套餐。

UML类图
建造者模式详解:建造随意搭配的肯德基套餐

代码实现

参考源码类实现

org.apache.flink.connector.kafka.source.KafkaSourceBuilder
org.apache.flink.connector.jdbc.JdbcExecutionOptions.Builder

产品类

产品就是一份肯德基套餐,包含汉堡,小食,饮料,且数量不限。

public class Product {
    private List<String> burgers;//汉堡
    private List<String> snacks;//小食
    private List<String> drinks;//饮料

    public Product(List<String> burgers, List<String> snacks, List<String> drinks) {
        this.burgers = burgers;
        this.snacks = snacks;
        this.drinks = drinks;
    }
	
    //创建一个建造者类
    public static ProductBuilder builder(){
        return new ProductBuilder();
    }
	
    //展示套餐中的内容
    public void showProduct() {
        int i=burgers.size();
        int j=snacks.size();
        int k=drinks.size();
        String res="已经创建了一份套餐,该套餐包含:"+"\n"
                +i+"个汉堡,"+burgers.toString()+"\n"
                +j+"份小食,"+snacks.toString()+"\n"
                +k+"瓶饮料,"+drinks.toString();
        System.out.println(res);
    }
}
建造者类

建造者主要包含往套餐中加料的方法,如往套餐中加入一份具体的汉堡addBurger,一瓶具体的饮料addDrink等,最后提供一个build()方法,返回创建好的套餐

public class ProductBuilder {
    private List<String> burgers;
    private List<String> snacks;
    private List<String> drinks;

    public ProductBuilder() {
        this.burgers = new ArrayList<>();
        this.snacks = new ArrayList<>();
        this.drinks = new ArrayList<>();
    }

    public ProductBuilder addBurger(String burger){
        burgers.add(burger);
        return this;
    }

    public ProductBuilder addSnack(String snack){
        snacks.add(snack);
        return this;
    }

    public ProductBuilder addDrink(String drink){
        drinks.add(drink);
        return this;
    }

    public Product build(){
        return new Product(burgers,snacks,drinks);
    }
}
测试类

创建一份任意搭配的套餐。

public class Test {
    public static void main(String[] args) {
        Product product=Product.builder()
                .addBurger("奥尔良汉堡")
                .addBurger("巧克力汉堡")
                .addSnack("薯条")
                .addDrink("中杯可乐")
                .build();
        product.showProduct();
    }
}

建造者模式详解:建造随意搭配的肯德基套餐

指挥者(可选)

如果考虑代码复用性,还可以创建一个指挥者类,用于构建单人套餐,双人套餐等。

public class Director {
    //创建单人套餐
    public static Product createSingleProducts(){
        return Product.builder()
                .addBurger("奥尔良汉堡")
                .addSnack("薯条")
                .addDrink("中杯可乐")
                .build();
    }
    //创建双人套餐
    public static Product createDoubleProducts(){
        return Product.builder()
                .addBurger("奥尔良汉堡").addBurger("巧克力汉堡")
                .addSnack("薯条").addSnack("蛋黄派")
                .addDrink("中杯可乐").addDrink("热牛奶")
                .build();
    }
}

使用指挥者直接创建定制套餐

public class Test {
    public static void main(String[] args) {
        //创建双人套餐
        Product product=Director.createDoubleProducts();
        product.showProduct();
    }
}

三、总结

本文详细介绍了Java建造者模式,通过模拟构建肯德基套餐的案例,让你轻松掌握建造者模式的原理和实现。Java建造者模式使用多个简单的对象一步一步构建成一个复杂的对象,可以精细控制对象的每一个属性创建。这种模式建造者独立于产品对象,专职于产品的创建工作,能显著提高代码的可读性和可维护性。

总之,建造者模式是Java程序员必备的技能之一,掌握它将为你在软件开发领域提供更多的机会。希望本文能对你有所帮助,如果你喜欢这篇文章,别忘了点赞和关注哦!


建造者模式详解:建造随意搭配的肯德基套餐文章来源地址https://www.toymoban.com/news/detail-447670.html

到了这里,关于建造者模式详解:建造随意搭配的肯德基套餐的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c#中建造者设计模式详解

    基础介绍:    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。   说白了就是将一个复杂的对象拆分成一个一个 零件 ,然后按照既定顺序和规则进行 组装 ,最终形成这个相对复杂的 对象 。   具体可分为4个角色:     Produc

    2024年02月05日
    浏览(38)
  • Java设计模式之建造者模式详解(Builder Pattern)

    在日常的开发工作中,我们常常需要创建一些复杂的对象。这些对象可能包含许多不同的属性,并且这些属性的初始化过程可能相当复杂。在这种情况下,建造者模式是一种非常有用的设计模式,因为它允许我们分步骤地创建复杂的对象。 概念和原理: 建造者模式(Builder

    2024年02月09日
    浏览(44)
  • 建造者模式深入理解:演示建造单个和多个产品的实践,结合模板模式,通俗易懂

    首先呢看下建造者的定义是什么样的,先读一遍 建造者模式 (Builder Pattern)是一种创建型设计模式,它主要用于将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表现形式。这种模式通过一系列可重用的独立的类(称为建造者或构建器)来一

    2024年01月22日
    浏览(40)
  • 【设计模式】建造者模式

    建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 意图: 将一个复杂的构建与其表示相分

    2024年02月13日
    浏览(43)
  • 设计模式: 建造者模式

    建造模式通过一步一步的去构建一个复杂的对象。该模式将对象的构建细节封装在一个独立的建造者类中,使得客户端代码可以根据需要定制对象的构建过程,而不必知道具体的构建细节。 建造者模式通常包括以下几个角色: 产品类(Product):需要对象,通常是包含多个属

    2024年02月21日
    浏览(38)
  • 设计模式——建造者模式

    建造者模式(Builder Pattern)是一种创建型设计模式,它允许通过分步骤来构建复杂对象。该模式的核心原理是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表现形式。 在建造者模式中,通常有以下角色: 抽象建造者(Builder): 定义了创建产品

    2024年01月16日
    浏览(44)
  • 创建型模式 - 建造者模式

    将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。 由于实现了构建和装配的解耦。不同的构建器,相同的

    2024年02月16日
    浏览(25)
  • 设计模式-建造者模式

    在前面几篇文章中,已经讲解了单例模式、工厂方法模式、抽象工厂模式,创建型还剩下一个比较重要的模式-建造者模式。在理解该模式之前,我还是希望重申设计模式的初衷,即 为解决一些问题而提供的优良方案 。学习设计模式遗忘其初衷,注定无法理解其真正的深刻内

    2024年02月15日
    浏览(43)
  • 创建型模式 | 建造者模式

    建造者模式 又叫生成器模式,是一种对象的构建模式。它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。创建者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,

    2024年01月22日
    浏览(33)
  • 创建型模式-建造者模式

    使用多个简单的对象一步一步构建成一个复杂的对象 主要解决: 主要解决在软件系统中,有时候面临着\\\"一个复杂对象\\\"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包