目录
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("Part A: " + partA);
System.out.println("Part B: " + partB);
System.out.println("Part C: " + 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
,其中包含了三个部件partA
、partB
和partC
。抽象建造者Builder
定义了产品的构建步骤和接口,具体建造者ConcreteBuilder
实现了抽象建造者接口,并负责具体的构建过程。指挥者Director
负责调用具体建造者的方法来构建产品,控制构建的流程和顺序。
在客户端代码中,我们创建了一个具体建造者ConcreteBuilder
的实例,并将其传递给指挥者Director
。然后调用指挥者的construct()
方法来构建产品,最后通过具体建造者的getResult()
方法获取构建完成的产品。最终调用产品的show()
方法展示产品的部件信息。
总的来说,建造者模式适用于构建过程复杂、对象组成部分多且可变、希望隐藏构建细节的场景,能够提高代码的可读性、灵活性和可维护性。
文章浏览阅读1k次。Instruction for building TheiaSfM._theia-sfm
文章浏览阅读458次。第一步:下载进入到mysql官网下载自己对应版本的mysql,下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads我这里下载mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz版本也可以进入linux后用命令下载wget https://cdn.mysql.com//Downloads..._mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz下载
文章浏览阅读388次。题意:给出一个序列,四种操作C l r d: Adding a constant d for every {Ai | l <= i <= r}, and increase the timestamp by 1, this is the only operation that will cause the timestamp increase. Q l r: Querying the current_to the moon操作
文章浏览阅读283次。将mysql的镜像导出成tar文件到当前文件夹。docker-compose.yml文件。#离线做mysql升级。_升级 docker-compose
文章浏览阅读469次。首先这是show.jsp pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><% request.setCharacterEncoding("utf-8"); String name = r_numberformatexception null
文章浏览阅读2.8k次,点赞3次,收藏24次。转载:https://www.cnblogs.com/520playboy/p/6275022.html背景我们经常能在shell脚本中发现>/dev/null 2>&1这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>&1 >/dev/null,出了一点小问题之后,我才开始去了解这段命令背后的“玄机”。sh..._linux文件的重定向顺序是从左到右
文章浏览阅读880次,点赞19次,收藏17次。猴子测试是一种用于测试应用程序的黑盒测试,通过提供随机输入来检查系统行为,例如检查系统是否崩溃。测试主管通常会准备它,或者测试经理,文档的重点是描述要测试什么,如何测试什么时候测试,谁来做什么测试。我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。猴子测试和即席测试都遵循非正式的方法,但是在猴子测试中,我们不需要对软件有深入的了解。它是最终测试,同时执行功能性和非功能性测试。
文章浏览阅读79次。char *UniCodeToUTF8(CString strUniCode){ LPWSTR pWstr = new wchar_t[strUniCode.GetLength() + 1]; wcscpy(pWstr, T2W((LPTSTR)strUniCode.GetString())); //获取转完后的长度 int nLen = WideCh..._utf8_ai
文章浏览阅读5.5k次。最近在搭建hadoop集群实验中,启动集群时常报错:jobtracker.info could only be replicated to 0 nodes, instead of 1查了好多资料,用了好多方式尝试解决,通过下面的命令总有找到问题所在了。原因:Configured Capacity也就是datanode 没用分配容量 [root@dev9106 bin]# ./ha_dfsadmin -report详解
文章浏览阅读747次。1:Spring框架和Struts2框架如何整合??? Spring 负责对象创建 Struts2 用Action处理请求2:Spring与Struts2框架整合的关键点: 让struts2框架action对象的创建,交给Spring完成3:Spring框架和Struts2框架开发步骤: (1):引入Struts2框架的相关jar包 (2):引入Spring框_spring框架 struts2
文章浏览阅读1k次,点赞13次,收藏22次。API网关为微服务架构中的服务提供了统一的访问入口,客户端通过API网关访问相关服务。API网关的定义类似于设计模式中的门面模式,它相当于整个微服务架构中的门面,所有客户端的访问都通过它来进行路由及过滤。它实现了请求路由、负载均衡、校验过滤、服务容错、服务聚合等功能。接下来我们自定义一个过滤器来演示下过滤器的作用。
文章浏览阅读268次。本文转载于:猿2048网站https://www.mk2048.com/blog/blog.php?id=hhaiib&title=%E5%89%8D%E7%AB%AF%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF%E4%B9%8BCSS+%EF%BC%88%..._file:///d:/%e5%89%8d%e7%ab%af%e5%ad%a6%e4%b9%a0%e6%ba%90%e7%a0%81/%e6%b1