Java结构型设计模式中建造者模式示例详解

Java结构型设计模式中建造者模式示例详解

什么是建造者模式?

建造者模式是一种创建型设计模式,它允许你创建复杂对象的过程与其表示相分离。通过使用相同的构建过程,可以创建不同的表示。

示例1:创建一个电脑对象

假设我们要创建一个电脑对象,它有许多可选的组件,如CPU、内存、硬盘等。使用建造者模式可以将创建过程与表示分离,使得我们可以根据需要选择不同的组件来构建电脑对象。

首先,我们需要定义一个电脑类,它包含了电脑的各个组件:

public class Computer {
    private String cpu;
    private int memory;
    private int hardDisk;

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public void setMemory(int memory) {
        this.memory = memory;
    }

    public void setHardDisk(int hardDisk) {
        this.hardDisk = hardDisk;
    }

    // 省略其他方法
}

接下来,我们定义一个电脑建造者类,它负责构建电脑对象:

public class ComputerBuilder {
    private Computer computer;

    public ComputerBuilder() {
        computer = new Computer();
    }

    public ComputerBuilder setCpu(String cpu) {
        computer.setCpu(cpu);
        return this;
    }

    public ComputerBuilder setMemory(int memory) {
        computer.setMemory(memory);
        return this;
    }

    public ComputerBuilder setHardDisk(int hardDisk) {
        computer.setHardDisk(hardDisk);
        return this;
    }

    public Computer build() {
        return computer;
    }
}

最后,我们可以使用建造者模式来创建电脑对象:

Computer computer = new ComputerBuilder()
    .setCpu(\"Intel i7\")
    .setMemory(8)
    .setHardDisk(500)
    .build();

通过使用建造者模式,我们可以根据需要选择不同的组件来构建电脑对象,而不需要直接调用电脑类的构造方法。

示例2:创建一个汽车对象

假设我们要创建一个汽车对象,它有许多可选的属性,如颜色、引擎类型、座位数等。使用建造者模式可以将创建过程与表示分离,使得我们可以根据需要选择不同的属性来构建汽车对象。

首先,我们需要定义一个汽车类,它包含了汽车的各个属性:

public class Car {
    private String color;
    private String engineType;
    private int seatCount;

    public void setColor(String color) {
        this.color = color;
    }

    public void setEngineType(String engineType) {
        this.engineType = engineType;
    }

    public void setSeatCount(int seatCount) {
        this.seatCount = seatCount;
    }

    // 省略其他方法
}

接下来,我们定义一个汽车建造者类,它负责构建汽车对象:

public class CarBuilder {
    private Car car;

    public CarBuilder() {
        car = new Car();
    }

    public CarBuilder setColor(String color) {
        car.setColor(color);
        return this;
    }

    public CarBuilder setEngineType(String engineType) {
        car.setEngineType(engineType);
        return this;
    }

    public CarBuilder setSeatCount(int seatCount) {
        car.setSeatCount(seatCount);
        return this;
    }

    public Car build() {
        return car;
    }
}

最后,我们可以使用建造者模式来创建汽车对象:

Car car = new CarBuilder()
    .setColor(\"Red\")
    .setEngineType(\"V8\")
    .setSeatCount(4)
    .build();

通过使用建造者模式,我们可以根据需要选择不同的属性来构建汽车对象,而不需要直接调用汽车类的构造方法。

总结

建造者模式允许我们通过将创建过程与表示分离,来创建复杂对象。通过定义一个建造者类,我们可以根据需要选择不同的组件或属性来构建对象。这种模式提供了更灵活的对象创建方式,并且使得代码更易于维护和扩展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java结构型设计模式中建造者模式示例详解 - Python技术站

(0)
上一篇 2023年8月6日
下一篇 2023年8月6日

相关文章

  • Vue中封装input组件的实例详解

    对于Vue中封装input组件的实例详解,我们可以从以下几个方面来进行讲解: 主要内容 组件的封装和使用 组件的参数和事件 组件的自定义样式 其中,组件的封装和使用是最为基础的内容。我们可以通过以下示例来了解其基本的实现方法。 组件的封装和使用 在Vue中,我们可以通过Vue.component方法来创建一个组件,并通过props参数来传递数据。例如,我们要…

    other 2023年6月25日
    00
  • go语言的工作空间和GOPATH环境变量介绍

    一、什么是Go语言的工作空间? Go语言的工作空间,本质上是一个目录,其中包含三个子目录:- src: 存放 Go 语言的源代码文件,按照项目进行组织。- pkg: 存放编译好的项目包的目录,通常缩写为 packages。- bin: 存放编译得到的可执行文件的目录。 在工作空间的根目录下的每个子目录代表着一个独立的工程,每个子目录可以包含不同的包,这些包可…

    other 2023年6月27日
    00
  • Java 线程的生命周期完整实例分析

    Java 线程的生命周期完整实例分析 在 Java 中,线程是非常常见的概念。了解线程的生命周期对于正确编写多线程程序是非常重要的。本文将介绍 Java 线程的完整生命周期,并给出两个实例进行说明。 Java 线程的生命周期 Java 线程的生命周期可以归纳为以下 6 个阶段: 新建(New):当线程对象被创建后处于新建状态。 就绪(Runnable):当调…

    other 2023年6月27日
    00
  • Scala之Object的具体使用(小结)

    下面是详细讲解“Scala之Object的具体使用(小结)”的完整攻略: 1. Object的介绍 在Scala中,Object是一种特殊的class,它只有一个单例实例。我们可以把Object看成是一些静态的方法和属性的集合,这些方法和属性可以通过Object访问,而不需要对Object进行实例化操作。因此,Object可以看成是Scala中的静态类。 2…

    other 2023年6月26日
    00
  • 原生js封装的一些jquery方法(详解)

    我来详细讲解一下 “原生js封装的一些jquery方法(详解)” 的完整攻略。 什么是jQuery? jQuery 是一种快速、简洁的 JavaScript 库,简化了HTML文档遍历和操作、事件处理、动画效果和 Ajax等许多操作。 为什么需要封装jQuery方法? 虽然 jQuery 可以帮助我们快速开发网页,但有些时候,我们不想引用整个 jQuery …

    other 2023年6月25日
    00
  • mac开启局域网smb文件共享(附全平台连接方法)

    Mac开启局域网SMB文件共享 在Mac上,您可以通过开启SMB文件共享来让其他设备在局域网内访问您的Mac上的文件。攻略细介绍如何在Mac上开启SMB文件共享,并提供两个示例说明,示如何在不同平台上连接到SMB共享。 开启SMB文件共享 以下是在Mac上开启SMB文件共享的步骤: 打开“系统偏”。 点击“共享”选项。 在左侧的列表中,勾选“文件共享”选项。…

    other 2023年5月7日
    00
  • VUE实现分布式医疗挂号系统预约挂号首页步骤详情

    针对这个问题,我会给出以下详细的解答: 1. 背景与需求 在实现分布式医疗挂号系统时,预约挂号首页是至关重要的一步。用户通过首页进行预约挂号,需要浏览医院信息、选择科室、医生以及挂号时间等。因此,预约挂号首页需要实现如下功能: 显示医院信息,包括医院名称、地址、电话等。 显示可挂号的科室信息,包括科室名称、医生信息等。 支持根据时间、科室、医生等条件进行挂号…

    other 2023年6月26日
    00
  • amcl介绍

    下面是关于“amcl介绍”的完整攻略: 1. AMCL简介 AMCL(Adaptive Monte Carlo Localization)是一种自适应蒙卡罗定位算法,用于机器人在未知环境中的自我定位。CL算法通过蒙特卡罗方法对机器人的位姿进行估计,同时根据机器人的运动和传感器数据进行自适调整,高定位的精度和鲁棒性。 AMCL算法的核心思想是蒙特卡罗方法对机器…

    other 2023年5月7日
    00
合作推广
合作推广
分享本页
返回顶部