首页 > 其他分享 >建造者模式:组装复杂实例

建造者模式:组装复杂实例

时间:2023-04-23 15:12:27浏览次数:36  
标签:builder product String void 组装 建造 实例 public

建造者模式的生命周期通常包括以下步骤:

  1. 创建一个建造者对象
  2. 调用该创建者对象的一系列设置方法,以指定对象的各个属性
  3. 调用build()方法,该方法将运行实际的构建过程
  4. 返回构建的对象

建造者模式可以减少代码的重复性,并且可以简化创建复杂对象的过程,从而提高代码的可读性和可维护性。由于它提供了灵活的构造选项,因此建造者模式尤其适用于创建具有多个可选属性的对象。

建造者模式通常涉及四个主要组件:产品(Product),建造者(Builder),指挥者(Director)和客户端(Client)。

  1. 产品 是我们要构建的对象,它具有一系列属性和方法。
  2. 建造者 是一个具有构建产品各个组成部分的接口或抽象类。它定义了构建对象所需的方法,并且可以有多种实现。
  3. 指挥者 是负责协调建造者的对象。它负责确保构造器按正确的顺序调用,最终构建出目标对象,同时它可能也包含一些逻辑,比如提供默认值和默认构造器等。
  4. 客户端 是调用指挥者构建对象的代码。它只需要实例化指挥者和相应的建造者,并将建造器传递给指挥者即可。

示例代码:

// 产品类
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 String getPartA() {
      return partA;
   }
   
   public String getPartB() {
      return partB;
   }
   
   public String getPartC() {
      return partC;
   }
}

// 建造者接口
interface Builder {
   public void buildPartA();
   public void buildPartB();
   public void buildPartC();
   public Product getProduct();
}

// 具体建造者类
class ConcreteBuilder implements Builder {
   private Product product = new Product();
   
   public void buildPartA() {
      product.setPartA("PartA");
   }
   
   public void buildPartB() {
      product.setPartB("PartB");
   }
   
   public void buildPartC() {
      product.setPartC("PartC");
   }
   
   public Product getProduct() {
      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 Client {
   public static void main(String[] args) {
      Builder builder = new ConcreteBuilder();
      Director director = new Director(builder);
      director.construct();
      Product product = builder.getProduct();
      System.out.println(product.getPartA());
      System.out.println(product.getPartB());
      System.out.println(product.getPartC());
   }
}

标签:builder,product,String,void,组装,建造,实例,public
From: https://www.cnblogs.com/li053/p/17340818.html

相关文章

  • Python类变量和实例变量,傻傻分不清楚
    今日鸡汤坐看云卷云舒,静听花开花落。大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群有个叫【Chloé】的粉丝问了一个关于Python类变量和实例变量的问题,这里拿出来给大家分享下,一起学习。这个粉丝在法国留学,所以提问是英文的,当然了英文看上去也不难,有点二级英文基......
  • JavaScript实现文件上传下载功能实例解析
    ​ 需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步:前端修改由于项目使用的是BJUI前端框架,并没有使用框架本身的文件上传控件,而使用的基于jQuery的Uploadify......
  • JS实现文件上传下载功能实例解析.
    ​ 对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传,从上传的效率来看,利用多线程并发上传能够达到最大效率。 本文是基于springboot+vue实现的文件上传,本文主要介绍服务端实现文件......
  • 手把手教你进行Scrapy中item类的实例化操作
     接下来我们将在爬虫主体文件中对Item的值进行填充。1、首先在爬虫主体文件中将Item模块导入进来,如下图所示。2、第一步的意思是说将items.py中的ArticleItem类导入到爬虫主体文件中去,将两个文件串联起来,其中items.py的部分内容如下图所示。3、将这个ArticleItem类导入之后,接下来......
  • 1、企业级VPN服务OpenVPN与如何购买阿里云ECS实例
    OpenVPN(虚拟专用网络)OpenVPN部署阿里云OpenVPN实战环境(https:www.aliyun.com)阿里云服务器购买专有网络标准:1、按量付费,华北3张家口可用区A区,X86通用g62cpu8GiB,买三台,要求系统一样,公共镜像rukey8.664位,ESSDAutoPL40GiB,创建交换机,选择专有网络,并给交换机起名M50-NET,取消......
  • URL 正则表达式 实例
    1.获取URL指定参数exportfunctionparseQueryString(name:string,url=location.search){constreg=newRegExp(`(^|[?&])${name}=([^?&]*)(&|$)`,'i');returndecodeURIComponent(reg.exec(url)?.[2]||'');}consturl=http......
  • Springboot 多实例负载均衡部署
    Springboot多实例负载均衡部署一、测试代码:控制层测试代码:importjava.net.Inet4Address;importjava.net.InetAddress;importjava.net.UnknownHostException;@Controller@RequestMapping("/test")publicclassTestController{@GetMapping("")@Resp......
  • mac冒险游戏:神奇宝盒:冒险建造者Wonderbox for mac 中文版
    Wonderbox是一款由 AquirisGameStudio开发的跨平台冒险游戏。在这个游戏中,玩家将进入一个充满奇幻和创造性的世界,并且可以使用各种工具和素材来创建自己的世界。Wonderbox的游戏特色主要包括以下几点:创造性玩法-玩家可以在游戏中使用各种不同的工具和素材来建造自己的世界,......
  • [tarjan强连通分量算法] 目的,图解,思路,伪代码,实例
    强连通分量算法(Tarjan'sStronglyConnectedComponentAlgorithm)利用深度优先算法找到一个非强连通的有向图中的所有强连通子图。无向图可以被认为是同时具备u->v和v->u的图。一些概念强连通:在有向图中,任意点u与v之间存在有来回两个方向的通路,类似存在一个环;强连通图:图......
  • c++在嵌入类中定义上层类的实例
    问题是这样的,嵌入类挺好的,可以有效表明类之间的从属关系,我们常常这样classA{public:classAttr{private:A&mA;};};这样是没有问题的,因为A此时还没有完全定义,使用引用或指针都是可以的。但是有些时候,如果A对象是一个临时对象,但我们想让Attr对象可以独......