重学 Java 设计模式:实战建造者模式

简介: 重学 Java 设计模式:实战建造者模式

引言

在软件开发中,设计模式是一种被广泛使用的解决问题的方法。设计模式帮助我们更好地组织和管理代码,提供了一种可靠和可复用的设计方案。在本篇文章中,我们将重点介绍一种常用的设计模式——建造者模式,并通过一个实际的案例来演示其应用。

什么是建造者模式?

建造者模式是一种创建型设计模式,它允许我们将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

在实际开发中,有些对象的创建过程非常复杂,可能涉及多个步骤和多个组件的组合。如果我们直接在客户端代码中进行对象的创建和配置,会导致代码变得冗长且难以维护。而建造者模式通过将对象的构建过程委派给一个独立的建造者类,使得客户端代码与具体的构建过程解耦,同时提供了更好的灵活性和可扩展性。

实战建造者模式:各项装修物料组合套餐选配场景

假设我们是一家装修公司,提供各种装修套餐供客户选择。每个套餐包含不同的物料组合,如地板、墙壁涂料、家具等。每个客户根据自己的需求可以选择不同的套餐,并且可以根据个人喜好进行定制。

现在我们来设计一个建造者模式来实现这个场景。

第一步:定义产品类

我们首先定义一个产品类,表示装修套餐。该类包含了各种装修物料的属性和方法。

public class DecorationPackage {
    private String floor;
    private String wallPaint;
    private String furniture;
    public void setFloor(String floor) {
        this.floor = floor;
    }
    public void setWallPaint(String wallPaint) {
        this.wallPaint = wallPaint;
    }
    public void setFurniture(String furniture) {
        this.furniture = furniture;
    }
    // 其他属性和方法
}

第二步:定义建造者接口

接下来,我们定义一个建造者接口,用于构建装修套餐的不同组件。

public interface DecorationBuilder {
    void buildFloor();
    void buildWallPaint();
    void buildFurniture();
    DecorationPackage getDecorationPackage();
}

第三步:实现具体的建造者类

我们根据客户的需求实现具体的建造者类,负责构建不同的装修

套餐。

public class SimpleDecorationBuilder implements DecorationBuilder {
    private DecorationPackage decorationPackage;
    public SimpleDecorationBuilder() {
        this.decorationPackage = new DecorationPackage();
    }
    @Override
    public void buildFloor() {
        decorationPackage.setFloor("简约地板");
    }
    @Override
    public void buildWallPaint() {
        decorationPackage.setWallPaint("白色墙壁涂料");
    }
    @Override
    public void buildFurniture() {
        decorationPackage.setFurniture("简单家具");
    }
    @Override
    public DecorationPackage getDecorationPackage() {
        return decorationPackage;
    }
}

第四步:定义指挥者类

指挥者类负责指导建造者的构建过程,对外隐藏建造者的具体实现细节。

public class DecorationDirector {
    private DecorationBuilder builder;
    public DecorationDirector(DecorationBuilder builder) {
        this.builder = builder;
    }
    public DecorationPackage buildDecorationPackage() {
        builder.buildFloor();
        builder.buildWallPaint();
        builder.buildFurniture();
        return builder.getDecorationPackage();
    }
}

第五步:客户端调用

在客户端代码中,我们可以通过指挥者类来构建不同的装修套餐,并获取最终的装修结果。

public class Client {
    public static void main(String[] args) {
        DecorationBuilder builder = new SimpleDecorationBuilder();
        DecorationDirector director = new DecorationDirector(builder);
        DecorationPackage decorationPackage = director.buildDecorationPackage();
        // 输出装修套餐的具体信息
        System.out.println("地板:" + decorationPackage.getFloor());
        System.out.println("墙壁涂料:" + decorationPackage.getWallPaint());
        System.out.println("家具:" + decorationPackage.getFurniture());
    }
}

总结

通过实战建造者模式的「各项装修物料组合套餐选配场景」,我们可以看到建造者模式的优势。它将复杂对象的构建过程封装在一个独立的建造者类中,使得客户端代码与具体的构建过程解耦,同时提供了更好的灵活性和可扩展性。在实际开发中,建造者模式可以帮助我们更好地组织和管理代码,减少重复性的代码编写,并提高系统的可维护性和可测试性。

希望通过本篇文章的介绍,您对建造者模式有了更深入的了解,并能在实际开发中灵活应用。建造者模式只是众多设计模式中的一种,深入学习和掌握不同的设计模式将有助于我们提升软件开发的能力和代码质量。


目录
相关文章
|
3月前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
85 2
|
14天前
|
Java
Java基础却常被忽略:全面讲解this的实战技巧!
本次分享来自于一道Java基础的面试试题,对this的各种妙用进行了深度讲解,并分析了一些关于this的常见面试陷阱,主要包括以下几方面内容: 1.什么是this 2.this的场景化使用案例 3.关于this的误区 4.总结与练习
|
2月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
30天前
|
Java 程序员
Java基础却常被忽略:全面讲解this的实战技巧!
小米,29岁程序员,分享Java中`this`关键字的用法。`this`代表当前对象引用,用于区分成员变量与局部变量、构造方法间调用、支持链式调用及作为参数传递。文章还探讨了`this`在静态方法和匿名内部类中的使用误区,并提供了练习题。
32 1
|
2月前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
67 6
|
2月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
36 2
|
2月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
2月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
40 4
|
3月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
3月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
57 0
[Java]23种设计模式