首页 > 其他分享 >设计模式-建造者模式

设计模式-建造者模式

时间:2023-09-27 23:08:14浏览次数:21  
标签:builder Product void 建造 模式 构建 设计模式 public

(目录)

设计模式-建造者模式

什么是建造者设计模式?

建造者模式是一种创建型设计模式,它允许你按照特定的步骤创建复杂对象。它将对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式通常用于创建具有复杂结构的对象,例如需要多个步骤或多个部件来构建的对象。它将构建过程分解为一系列的步骤,每个步骤都有一个具体的建造者来完成。最终,所有的步骤都被组合在一起,形成一个完整的对象。

建造者模式包含以下几个角色:

  1. 产品(Product):要创建的复杂对象,它由多个部件组成。
  2. 抽象建造者(Builder):定义了构建产品的抽象接口,包括各个部件的构建方法。
  3. 具体建造者(Concrete Builder):实现了抽象建造者接口,负责具体的构建过程。
  4. 指挥者(Director):负责控制建造过程的顺序和流程,以及返回最终构建的产品。

通过使用建造者模式,可以将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。同时,它也使得构建过程更加灵活,可以根据需要动态地改变构建顺序或部件的组合方式。

使用场景

建造者模式适用于以下场景:

  1. 当需要创建复杂对象时,可以使用建造者模式。复杂对象通常由多个部件组成,每个部件都有自己的构建过程。通过使用建造者模式,可以将构建过程分解为多个步骤,每个步骤由一个具体的建造者来完成,最终将所有的部件组合在一起构建出复杂对象。
  2. 当需要创建的对象具有多个变种时,可以使用建造者模式。不同的具体建造者可以实现不同的构建过程,从而创建出不同的对象表示。通过使用建造者模式,可以动态地改变构建过程或部件的组合方式,从而创建出不同的对象。
  3. 当需要创建的对象的构建过程需要独立于其表示时,可以使用建造者模式。建造者模式将构建过程与表示分离,使得构建过程可以独立于具体的表示。这样一来,可以根据需要改变构建过程的顺序或部件的组合方式,而不影响最终的对象表示。

总之,建造者模式适用于需要创建

java示例

是的,以下是一个使用Java实现的建造者模式的示例:

// 产品类
class Product {
    private String partA;
    private String partB;
    private String partC;

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }

    public void show() {
        System.out.println("Product parts: " + partA + ", " + partB + ", " + partC);
    }
}

// 抽象建造者
interface Builder {
    void buildPartA();
    void buildPartB();
    void buildPartC();
    Product getResult();
}

// 具体建造者
class ConcreteBuilder implements Builder {
    private Product product;

    public ConcreteBuilder() {
        this.product = new Product();
    }

    @Override
    public void buildPartA() {
        product.setPartA("Part A");
    }

    @Override
    public void buildPartB() {
        product.setPartB("Part B");
    }

    @Override
    public void buildPartC() {
        product.setPartC("Part C");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

// 指挥者
class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public void construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
    }
}

// 示例代码
public class BuilderPatternExample {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);

        director.construct();

        Product product = builder.getResult();
        product.show();
    }
}

在上述示例中,Product类表示要构建的复杂对象,Builder接口定义了构建产品的抽象方法,ConcreteBuilder实现了具体的构建过程,Director负责控制构建过程的顺序。在示例代码中,我们创建了一个具体建造者ConcreteBuilder,并将其传递给指挥者Director。指挥者根据需要调用具体建造者的方法来构建产品。最后,我们通过调用具体建造者的getResult方法获取构建完成的产品,并展示其部件。

标签:builder,Product,void,建造,模式,构建,设计模式,public
From: https://blog.51cto.com/onejson/7629481

相关文章

  • 数据库的MVCC模式
    PG的mvcc模式:多版本并发控制,通过在数据库中创建多个版本的数据来实现并发的读写操作。每个数据库事务都能够看到一个逻辑上一致的数据库快照,当一个事务修改了数据库中的数据时,他不会直接修改原始数据,而是创建一个新的数据版本,并将修改后的数据写入新的数据版本中,这样其他事务依然......
  • JAVA 单例设计模式
    单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例......
  • 27、Flink 的SQL之SELECT (Pattern Recognition 模式检测)介绍及详细示例(7)
    Flink系列文章1、Flink部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接13、Flink的tableapi与sql的基本概念、通用api介绍及入门示例14、Flink的tableapi与sql之数据类型:内置数据类型以及它们的属性15、Flink的tableap......
  • Hadoop 1.0.2 安装 使用 单机模式 Hadoop_1
    装完的HDFS用IE打开访问,查看其磁盘使用情况:http://192.168.33.10:50070/dfshealth.jsp step1.为Hadoop增加用户,记住设定的密码 Java代码 1.$sudoaddgrouphadoop2.$sudoadduser--ingrouphadoophduserstep2.ssh的安装与设置 由于Hadoop......
  • Seata XA模式一阶段为什么一直锁定资源等二阶段成功?AT模式怎么解决的这个缺陷?
    Winwin:SeataXA模式一阶段为什么一直锁定资源等二阶段成功?AT模式怎么解决的这个缺陷?兔子:Seata是一个非常强大的分布式事务解决方案,它提供了XA模式和AT模式来支持分布式事务的一致性和可靠性。关于你的问题,我们先来聊一下SeataXA模式的一阶段和二阶段,好吗?在SeataXA模式的一......
  • 如何选择合适的RAID模式?群晖NAS玩家必懂
    RAID模式的选择一般在大家第一次设置NAS,或是为NAS添加硬盘扩容的时候,虽然这是每位用户的必经之路,但相信还是有不少小伙伴,依旧对RAID不太了解,RAID可以有效提升NAS的读写效率和安全性,一般桌面式机型中比较常见的有 Basic、RAID1、RAID5 和 SHR 四种,本文将帮助你快速......
  • c#装饰器模式详解
    基础介绍:  动态地给一个对象添加一些额外的职责。适用于需要扩展一个类的功能,或给一个类添加多个变化的情况。  装饰器,顾名思义就是在原有基础上添加一些功能。  大家都只知道如果想单纯的给原有类增加一些功能,可以直接继续该类生成一个子类就可以。  举个例子,如果现......
  • Debian11.7 配置vi非兼容模式
    对于最小化安装的Debian11.7,起初有一个问题给我造成了困扰:那就是当我使用vi编辑文本文件时,我无法通过键入“i”来切换到输入模式,或者说,其实的确进入了输入模式,但是底部行并没有显式进行提示,另外,我无法使用Backspace键来删除字符,Delete键是可以删除字符的,不过这不符合我正常......
  • 软件设计模式系列之十六——命令模式
    1模式的定义命令模式(CommandPattern)是一种行为型设计模式,旨在将请求发送者和接收者解耦,将一个请求封装为一个对象,从而允许您参数化客户端对象以进行不同的请求、排队请求或记录请求,并支持可撤销操作。命令模式的核心思想是将一个请求包装成一个对象,包括请求的参数和接收者对象......
  • 抽象类、抽象方法、模板方法设计模式的写法
    1、抽象方法:必须用abstarct修饰,只有方法签名,一定不能有方法体抽象类中不一定有抽象方法,有抽象方法的一定是抽象类  2、设计抽象类是为了更好的支持多态------------------------------------------------------------1、模板方法设计模式的写法(使用final修饰)a、定......