java实现建造者模式(Builder Pattern)

yizhihongxing

下面我就详细讲解一下“Java实现建造者模式(Builder Pattern)”的完整攻略。

什么是建造者模式?

建造者模式是一种对象创建型设计模式,它允许你创建不同风格的对象,同时避免构造器污染问题。在该模式中,我们将构造过程分步进行,使得在创建对象时能够更加灵活地控制每个构造步骤,从而创建不同类型的对象。

建造者模式的角色

建造者模式中有以下几个角色:

1. Product

Product 表示要生成的复杂对象,包含多个子部件。

2. Builder

Builder 定义抽象接口,规范了将部件装配到产品中的方法。

3. ConcreteBuilder

ConcreteBuilder 实现 Builder 接口,定义将具体部件装配到产品中的方法。

4. Director

Director 负责按照一定的顺序调用 Builder 中的方法来装配部件,然后构建复杂对象。

Java实现建造者模式示例

下面我们来看一下建造者模式的代码示例。

示例一:建造一个电脑

// Product
public class Computer {
    private String cpu;
    private String memory;
    private String hardDisk;
    private String display;

    public String getCpu() {
        return cpu;
    }

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

    public String getMemory() {
        return memory;
    }

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

    public String getHardDisk() {
        return hardDisk;
    }

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

    public String getDisplay() {
        return display;
    }

    public void setDisplay(String display) {
        this.display = display;
    }
}

// Builder
public interface ComputerBuilder {
    void setCpu();

    void setMemory();

    void setHardDisk();

    void setDisplay();

    Computer getProduct();
}

// ConcreteBuilder
public class StandardComputerBuilder implements ComputerBuilder {
    Computer computer = new Computer();

    @Override
    public void setCpu() {
        computer.setCpu("Intel Core i5-8300H");
    }

    @Override
    public void setMemory() {
        computer.setMemory("8GB DDR4 2666MHz");
    }

    @Override
    public void setHardDisk() {
        computer.setHardDisk("256GB SSD");
    }

    @Override
    public void setDisplay() {
        computer.setDisplay("15.6 inch FHD (1920 x 1080)");
    }

    @Override
    public Computer getProduct() {
        return computer;
    }
}

// Director
public class ComputerDirector {
    private ComputerBuilder computerBuilder;

    public ComputerDirector(ComputerBuilder computerBuilder) {
        this.computerBuilder = computerBuilder;
    }

    public void buildComputer() {
        computerBuilder.setCpu();
        computerBuilder.setMemory();
        computerBuilder.setHardDisk();
        computerBuilder.setDisplay();
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        ComputerBuilder builder = new StandardComputerBuilder();
        ComputerDirector director = new ComputerDirector(builder);
        director.buildComputer();
        Computer computer = builder.getProduct();
        System.out.println(computer.getCpu());
        System.out.println(computer.getMemory());
        System.out.println(computer.getHardDisk());
        System.out.println(computer.getDisplay());
    }
}

在这个示例中,我们为电脑创建了一个 Product 类,表示要生成的电脑,包含了 cpu、memory、hardDisk 和 display 四个属性。然后创建了一个 Builder 接口,定义了将各个部件装配到电脑中的方法。接着创建了一个 ConcreteBuilder 类 StandardComputerBuilder,它实现了 Builder 接口,定义了将具体部件装配到电脑中的方法。然后创建了一个 Director 类 ComputerDirector,它负责按照一定的顺序调用 Builder 中的方法来装配部件,然后构建电脑。最后在客户端创建了一个 StandardComputerBuilder 对象,并将其传递给 ComputerDirector,调用 buildComputer 方法构建电脑,然后获取产品的实例。

示例二:建造一个鸟的巢

// Product
public class BirdNest {
    private int size;
    private String material;
    private String location;

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public String getMaterial() {
        return material;
    }

    public void setMaterial(String material) {
        this.material = material;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }
}

// Builder
public interface BirdNestBuilder {
    void setSize();

    void setMaterial();

    void setLocation();

    BirdNest getProduct();
}

// ConcreteBuilder
public class WeaveBirdNestBuilder implements BirdNestBuilder {
    BirdNest nest = new BirdNest();

    @Override
    public void setSize() {
        nest.setSize(10);
    }

    @Override
    public void setMaterial() {
        nest.setMaterial("straw and twigs");
    }

    @Override
    public void setLocation() {
        nest.setLocation("in a tree");
    }

    @Override
    public BirdNest getProduct() {
        return nest;
    }
}

// Director
public class BirdNestDirector {
    private BirdNestBuilder nestBuilder;

    public BirdNestDirector(BirdNestBuilder nestBuilder) {
        this.nestBuilder = nestBuilder;
    }

    public void buildNest() {
        nestBuilder.setSize();
        nestBuilder.setMaterial();
        nestBuilder.setLocation();
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        BirdNestBuilder builder = new WeaveBirdNestBuilder();
        BirdNestDirector director = new BirdNestDirector(builder);
        director.buildNest();
        BirdNest nest = builder.getProduct();
        System.out.println(nest.getMaterial());
        System.out.println(nest.getLocation());
        System.out.println(nest.getSize());
    }
}

在这个示例中,我们为鸟的巢创建了一个 Product 类,表示要生成的巢,包含了 size、material 和 location 三个属性。然后创建了一个 Builder 接口,定义了将各个部件装配到巢中的方法。接着创建了一个 ConcreteBuilder 类 WeaveBirdNestBuilder,它实现了 Builder 接口,定义了将具体部件装配到巢中的方法。然后创建了一个 Director 类 BirdNestDirector,它负责按照一定的顺序调用 Builder 中的方法来装配部件,然后构建巢。最后在客户端创建了一个 WeaveBirdNestBuilder 对象,并将其传递给 BirdNestDirector,调用 buildNest 方法构建巢,然后获取产品的实例。

建造者模式的优点

  1. 建造者模式将创建对象的过程分步进行,可以更加灵活地控制每个构造步骤,从而创建不同类型的对象。
  2. 建造者模式可以避免构造器污染问题,提高代码的可读性和可维护性。
  3. 建造者模式可以将复杂对象的创建过程独立出来,方便后期修改和维护。

总结

这就是 Java 实现建造者模式的完整攻略,建造者模式是一种非常实用的设计模式,能够有效地提高代码的可读性和可维护性。可以根据具体的需求选择不同的 Builder 构造器,从而得到不同类型的对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现建造者模式(Builder Pattern) - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Sprint Boot @ConditionalOnClass使用方法详解

    @ConditionalOnClass是Spring Boot中的一个注解,它用于根据类路径中是否存在指定的类来决定是否启用或禁用某个组件。在使用Spring Boot开应用程序时,@ConditionalOnClass是非常有用的。本文将详细介绍@ConditionalOnClass的作用和使用方法,并提供两个示例说明。 @ConditionalOnCla…

    Java 2023年5月5日
    00
  • 详解.NET主流的几款重量级 ORM框架

    详解.NET主流的几款重量级 ORM 框架 在 .NET 开发领域,ORM 框架是不可缺少的一部分。ORM 框架能够将程序和数据库之间的交互转化为对象之间的交互,从而简化了开发过程,提高了代码的可维护性和可读性。 下面将详细讲解.NET 主流的几款 ORM 框架和其使用方法。 Entity Framework Entity Framework 是微软开发的 …

    Java 2023年5月20日
    00
  • 深层剖析java应用开发中MyBayis缓存

    针对“深层剖析java应用开发中MyBayis缓存”的完整攻略,我们可以从以下几个方面进行讲解: MyBatis缓存的概念:MyBatis缓存分为一级缓存和二级缓存。一级缓存是在SqlSession级别的缓存,是默认开启的,仅在同一SqlSession期间内有效。二级缓存是在SqlSessionFactory级别的缓存,生命周期只存在于一个会话期间中,也可以…

    Java 2023年5月20日
    00
  • 下载远程maven仓库的jar 手动放到本地仓库详细操作

    下面是下载远程maven仓库的jar 手动放到本地仓库的详细攻略: 准备工作 在进行手动安装过程前,请确保以下工作已经完成: 安装了 Maven,并配置好了环境变量。 存在一个 Maven 仓库地址,可以是远程仓库地址或本地仓库地址。 手动下载 jar 包 首先,你需要手动下载需要安装的 jar 包。可以在 Maven 仓库中寻找需要的 jar 包的地址,也…

    Java 2023年6月2日
    00
  • Java面试题之HashMap 的 hash 方法原理是什么

    HashMap 的 hash 方法原理是什么 在了解HashMap的原理之前, 我们先看看hash散列表是怎么工作的, 他的原理是什么。 散列表的原理是将关键字通过散列函数映射到固定的位置上, 并对原始值进行处理, 最终得到的值就是我们所说的哈希值, 即在HashMap中所表现出来的值。在JDK1.7之前,HashMap的内部实现方式是数组 + 链表,数组的…

    Java 2023年5月26日
    00
  • SpringBoot浅析安全管理之OAuth2框架

    SpringBoot浅析安全管理之OAuth2框架 什么是OAuth2框架 OAuth2是一种用于授权的开放标准,允许用户授权第三方应用访问他们存储在另外服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或共享他们存储在其他服务提供者上的所有数据。 OAuth2的基本工作原理 OAuth2的基本工作原理如下: 用户向客户端提供用户名和密码; 客户端向…

    Java 2023年5月20日
    00
  • Android 中cookie的处理详解

    Android 中cookie的处理详解 什么是cookie 在讲解 Android 中cookie的处理之前,先介绍一下什么是cookie。Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,浏览器在之后访问同一服务器时会在请求头中带上这些数据。通常,它用于判断用户是否已经登录网站、跟踪用户操作等。在 Android 开发中,cookie的处理是…

    Java 2023年6月16日
    00
  • 详解Java如何使用集合来实现一个客户信息管理系统

    详解Java如何使用集合来实现一个客户信息管理系统 1. 概述 在Java中,可以使用集合类来实现一个简单的客户信息管理系统。集合类提供了丰富的数据结构和操作方法,能够满足各种需求。 我们可以使用List或Set来存储客户信息,在程序中实现增删改查等操作。同时,我们可以利用Map来存储客户信息,实现键值对的存储,方便以后的查找和遍历。 2. 使用List实现…

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