网站建设先进个人代表发言免费asp主机网站
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:44
当前位置: 首页 > news >正文
网站建设先进个人代表发言,免费asp主机网站,模仿软件下载wordpress,如何开发一个手机网站#x1f44b;hi#xff0c;我不是一名外包公司的员工#xff0c;也不会偷吃茶水间的零食#xff0c;我的梦想是能写高端CRUD #x1f525; 2025本人正在沉淀中… 博客更新速度 #x1f44d; 欢迎点赞、收藏、关注#xff0c;跟上我的更新节奏 #x1f3b5; 当你的天空突… hi我不是一名外包公司的员工也不会偷吃茶水间的零食我的梦想是能写高端CRUD 2025本人正在沉淀中… 博客更新速度 欢迎点赞、收藏、关注跟上我的更新节奏 当你的天空突然下了大雨那是我在为你炸乌云 文章目录 一、入门什么是建造者模式为什么要建造者模式如何实现建造者模式传统建造者链式建造者 二、建造者模式在框架源码中的运用Java中的StringBuilder和StringBufferSpring Framework中的BeanDefinitionBuilder 三、总结建造者模式的优点建造者模式的缺点建造者模式的适用场景 一、入门
什么是建造者模式
建造者模式Builder Pattern是一种创建型设计模式用于逐步构建复杂对象。 它通过将对象的构建过程与表示分离使得相同的构建过程可以创建不同的表示。
为什么要建造者模式
假设我们要组装电脑需要cpu、内存、硬盘、gpu、电源… 没有使用建造者模式我们会这样写:
public class Computer {private String cpu;private String memory;private String hardDisk;private String gpu;private String powerSupply;public Computer(String cpu, String memory, String hardDisk, String gpu, String powerSupply) {this.cpu cpu;this.memory memory;this.hardDisk hardDisk;this.gpu gpu;this.powerSupply powerSupply;}
}存在问题
构造方法参数过多Telescoping Constructor Problem调用这样的构造方法时代码会变得非常冗长且难以理解
Computer computer new Computer(Intel i7, 16GB, 1TB SSD, NVIDIA RTX 3080, 750W);对象的不一致性在某些情况下对象可能需要在不同的步骤中逐步构建。如果没有建造者模式对象可能会在未完全初始化的情况下被使用导致不一致的状态。代码的可读性可维护性变差当对象的构建过程复杂时直接在客户端代码中编写构建逻辑会导致代码重复和难以维护。
Computer computer new Computer();
computer.setCpu(Intel i7);
computer.setMemory(16GB);
computer.setHardDisk(1TB SSD);
computer.setGpu(NVIDIA RTX 3080);
computer.setPowerSupply(750W);缺乏灵活性如果对象的构建过程需要支持多种不同的配置或表示形式直接在客户端代码中编写构建逻辑会导致代码的灵活性降低。例如如果需要构建不同类型的计算机如游戏计算机、办公计算机等每种类型的构建逻辑可能会有所不同导致代码重复和难以扩展。
如何实现建造者模式
传统建造者
主要角色
Product产品类最终要构建的复杂对象。Builder抽象建造者定义构建步骤的接口。ConcreteBuilder具体建造者实现Builder接口提供具体的构建步骤。Director指挥者负责调用Builder的步骤控制构建过程。
【案例】组装电脑 - 改 Product产品类Computer类最终要构建的复杂对象。
class Computer {private String cpu;private String memory;private String hardDisk;public void setCpu(String cpu) {this.cpu cpu;}public void setMemory(String memory) {this.memory memory;}public void setHardDisk(String hardDisk) {this.hardDisk hardDisk;}Overridepublic String toString() {return Computer [cpu cpu , memory memory , hardDisk hardDisk ];}
}Builder抽象建造者ComputerBuilder接口定义构建步骤的接口。
interface ComputerBuilder {void buildCpu();void buildMemory();void buildHardDisk();Computer getComputer();
}ConcreteBuilder具体建造者GamingComputerBuilder类实现Builder接口提供具体的构建步骤。
class GamingComputerBuilder implements ComputerBuilder {private Computer computer;public GamingComputerBuilder() {this.computer new Computer();}Overridepublic void buildCpu() {computer.setCpu(Intel i7);}Overridepublic void buildMemory() {computer.setMemory(16GB);}Overridepublic void buildHardDisk() {computer.setHardDisk(1TB SSD);}Overridepublic Computer getComputer() {return computer;}
}Director指挥者ComputerDirector类负责调用Builder的步骤控制构建过程。
class ComputerDirector {private ComputerBuilder computerBuilder;public ComputerDirector(ComputerBuilder computerBuilder) {this.computerBuilder computerBuilder;}public void constructComputer() {computerBuilder.buildCpu();computerBuilder.buildMemory();computerBuilder.buildHardDisk();}public Computer getComputer() {return computerBuilder.getComputer();}
}客户端代码
public class BuilderPatternDemo {public static void main(String[] args) {ComputerBuilder builder new GamingComputerBuilder();ComputerDirector director new ComputerDirector(builder);director.constructComputer();Computer computer director.getComputer();System.out.println(computer);}
}链式建造者
流式接口Fluent Interface或链式建造者模式。这种方式通过返回this来实现链式调用代码更加简洁和直观。 下面是一个使用链式调用的建造者模式示例
产品类Computer
class Computer {private String cpu;private String memory;private String hardDisk;private String gpu;public void setCpu(String cpu) {this.cpu cpu;}public void setMemory(String memory) {this.memory memory;}public void setHardDisk(String hardDisk) {this.hardDisk hardDisk;}public void setGpu(String gpu) {this.gpu gpu;}Overridepublic String toString() {return Computer [cpu cpu , memory memory , hardDisk hardDisk , gpu gpu ];}
}建造者类ComputerBuilder
class ComputerBuilder {private Computer computer;public ComputerBuilder() {this.computer new Computer();}public ComputerBuilder buildCpu(String cpu) {computer.setCpu(cpu);return this; // 返回this支持链式调用}public ComputerBuilder buildMemory(String memory) {computer.setMemory(memory);return this; // 返回this支持链式调用}public ComputerBuilder buildHardDisk(String hardDisk) {computer.setHardDisk(hardDisk);return this; // 返回this支持链式调用}public ComputerBuilder buildGpu(String gpu) {computer.setGpu(gpu);return this; // 返回this支持链式调用}public Computer build() {return computer; // 返回最终构建的对象}
}客户端代码
public class BuilderPatternDemo {public static void main(String[] args) {// 使用链式调用构建对象Computer computer new ComputerBuilder().buildCpu(Intel i7).buildMemory(16GB).buildHardDisk(1TB SSD).buildGpu(NVIDIA RTX 3080).build();System.out.println(computer);}
}对比传统建造者模式
传统建造者模式通过Director类控制构建过程适合构建过程固定的场景。链式建造者模式通过返回this实现链式调用适合构建过程灵活、需要动态配置的场景。
二、建造者模式在框架源码中的运用
Java中的StringBuilder和StringBuffer
StringBuilder和StringBuffer是Java中用于构建字符串的类它们使用了类似建造者模式的思想通过链式调用来逐步构建字符串。 示例
StringBuilder builder new StringBuilder();
builder.append(Hello).append( ).append(World);
String result builder.toString();
System.out.println(result); // 输出: Hello World分析 append方法返回this支持链式调用。通过逐步构建字符串最终调用toString方法生成结果。
Spring Framework中的BeanDefinitionBuilder
在Spring框架中BeanDefinitionBuilder用于构建BeanDefinition对象它是Spring IoC容器中定义Bean的核心类。 示例
BeanDefinitionBuilder builder BeanDefinitionBuilder.rootBeanDefinition(MyBean.class);
builder.addPropertyValue(name, MyBeanName).addPropertyValue(age, 30).setScope(BeanDefinition.SCOPE_SINGLETON);BeanDefinition beanDefinition builder.getBeanDefinition();分析 BeanDefinitionBuilder通过链式调用逐步配置Bean的属性。最终通过getBeanDefinition方法生成BeanDefinition对象。
三、总结
建造者模式的优点
分离构建与表示 将对象的构建过程与表示分离使得相同的构建过程可以创建不同的表示。客户端不需要知道对象的具体构建细节。 灵活性和可扩展性 可以逐步构建对象支持动态配置。新增构建步骤或修改构建顺序非常方便。 代码可读性和可维护性 链式调用Fluent Interface使代码更加简洁和直观。将复杂的构建逻辑封装在建造者类中客户端代码更清晰。 避免构造方法参数过多 通过逐步设置属性避免了构造方法参数过长的问题Telescoping Constructor Problem。 保证对象的一致性 对象在完全构建之前不会被使用确保对象的一致性和完整性。
建造者模式的缺点
增加代码复杂性 需要额外定义建造者类增加了类的数量。对于简单对象使用建造者模式可能会显得冗余。 适用范围有限 适用于构建复杂对象如果对象属性较少或构建过程简单使用建造者模式可能会过度设计。 性能开销 由于需要创建建造者对象可能会引入额外的性能开销通常可以忽略不计。
建造者模式的适用场景
构建复杂对象 当对象有很多属性且构建过程复杂时适合使用建造者模式。例如构建一个包含多个配置项的计算机对象。 需要多种表示形式 当同一个构建过程需要生成不同的对象表示时适合使用建造者模式。例如构建不同类型的计算机游戏计算机、办公计算机等。 避免构造方法参数过多 当构造方法参数过多导致代码难以阅读和维护时适合使用建造者模式。 需要逐步构建对象 当对象的构建过程需要分步骤完成时适合使用建造者模式。例如构建一个HTTP请求配置对象。 框架或工具类中的配置对象 在框架或工具类中经常需要构建复杂的配置对象建造者模式非常适合这种场景。例如Spring中的BeanDefinitionBuilder、Apache HttpClient中的RequestConfig.Builder等。
- 上一篇: 网站建设下拉导航栏医院网站建设怎么样
- 下一篇: 网站建设先进个人典型材料加强网站内容保密建设
相关文章
-
网站建设下拉导航栏医院网站建设怎么样
网站建设下拉导航栏医院网站建设怎么样
- 技术栈
- 2026年03月21日
-
网站建设系统教程wordpress iis速度慢
网站建设系统教程wordpress iis速度慢
- 技术栈
- 2026年03月21日
-
网站建设系统服务百度手机助手下载安卓
网站建设系统服务百度手机助手下载安卓
- 技术栈
- 2026年03月21日
-
网站建设先进个人典型材料加强网站内容保密建设
网站建设先进个人典型材料加强网站内容保密建设
- 技术栈
- 2026年03月21日
-
网站建设先进建站快车帮助
网站建设先进建站快车帮助
- 技术栈
- 2026年03月21日
-
网站建设现在好做吗湛江网站设计服务
网站建设现在好做吗湛江网站设计服务
- 技术栈
- 2026年03月21日
