网站首页 > 精选教程 正文
建造者模式定义:
建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以 将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方 法可以构造出不同表现(属性)的对象。
建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象 的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
角色构成:
Product(产品角色): 要创建的对象。
Builder(抽象建造者):创建一个Product对象的各个部件指定的 接口/抽象类。。
ConcreteBuilder(具体建造者):实现了抽象建造者的抽象方法。具体建造者负责实际构建产品的各个部分。
Director(指挥者): 调用具体建造者来创建对象的各个部分,在指挥者中不涉及具体产品的信息,只负责按照一定的顺序调用具体建造者的方法。
建造者模式应用场景:
1、创建对象过程比较复杂且属性较多,需要经过多个步骤来创建一个完整的对象
例如,在游戏开发中,创建一个复杂的游戏角色。游戏角色可能有角色外观(包括发型、服装、肤色等)、角色技能(多种不同的技能组合)、角色属性(力量、敏捷、智力等)等多个部分。
2、对象的构建过程需要灵活配置
以汽车定制系统为例,用户可以选择不同的发动机、车身颜色、内饰配置等。
3、创建对象的算法(步骤)独立于对象的组成部分和装配方式
例如,在建筑设计软件中,建筑模型的构建步骤是相对固定的,如先设计地基,再构建墙体,最后添加屋顶。但是建筑模型的具体组成部分(如不同的建筑风格的墙体、多种形状的屋顶)可以有多种变化。
4、需要生成对象的不同表示形式
例如,在文档生成系统中,可能需要生成不同格式(如 PDF、HTML、Word)的文档。文档有一些共同的部分,如标题、正文、图表等,但每种格式的具体呈现方式(表示形式)不同。
建造者模式的主要优点:
1、扩展性好提高了代码的可复用性。
2、可以更加精细地控制产品的创建过程,可以使产品的构建过程更加清晰。
3、封装性好可以隐藏复杂对象的创建细节,创建和使用相分离。
建造者模式Java样例:
1、传统方式:
产品类
class Computer {
private String cpu;
private String memory;
private String hardDisk;
public Computer(String cpu, String memory, String hardDisk) {
this.cpu = cpu;
this.memory = memory;
this.hardDisk = hardDisk;
}
public String getCpu() {
return cpu;
}
public String getMemory() {
return memory;
}
public String getHardDisk() {
return hardDisk;
}
}
抽象建造者
abstract class ComputerBuilder {
public abstract void buildCpu();
public abstract void buildMemory();
public abstract void buildHardDisk();
public abstract Computer getComputer();
}
具体建造者
class HighPerformanceComputerBuilder extends ComputerBuilder {
private Computer computer;
public HighPerformanceComputerBuilder() {
computer = new Computer("", "", "");
}
@Override
public void buildCpu() {
computer.setCpu("Intel Core i9");
}
@Override
public void buildMemory() {
computer.setMemory("32GB DDR5");
}
@Override
public void buildHardDisk() {
computer.setHardDisk("1TB SSD");
}
@Override
public Computer getComputer() {
return computer;
}
}
指挥官
class ComputerDirector {
private ComputerBuilder builder;
public ComputerDirector(ComputerBuilder builder) {
this.builder = builder;
}
public Computer constructComputer() {
builder.buildCpu();
builder.buildMemory();
builder.buildHardDisk();
return builder.getComputer();
}
}
使用示例
public class Main {
public static void main(String[] args) {
ComputerBuilder builder = new HighPerformanceComputerBuilder();
ComputerDirector director = new ComputerDirector(builder);
Computer computer = director.constructComputer();
System.out.println("CPU: " + computer.getCpu() + ", Memory: " + computer.getMemory() + ", Hard Disk: " + computer.getHardDisk());
}
}
2、链式调用
产品类(Product)
class User {
private final String name;
private final int age;
private final String address;
private User(UserBuilder builder) {
this.name = builder.name;
this.age = builder.age;
this.address = builder.address;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
public static class UserBuilder {
private String name;
private int age;
private String address;
public UserBuilder name(String name) {
this.name = name;
return this;
}
public UserBuilder age(int age) {
this.age = age;
return this;
}
public UserBuilder address(String address) {
this.address = address;
return this;
}
public User build() {
return new User(this);
}
}
}
使用示例
public class Main {
public static void main(String[] args) {
User user = new User.UserBuilder()
.name("John")
.age(30)
.address("123 Main St")
.build();
System.out.println("Name: " + user.getName() + ", Age: " + user.getAge() + ", Address: " + user.getAddress());
}
}
- 上一篇: Java设计模式-装饰器模式
- 下一篇: java设计模式之模板设计模式_V1
猜你喜欢
- 2025-03-10 java设计模式(4)-适配器模式
- 2025-03-10 Java设计模式:桥接模式,干货总结
- 2025-03-10 Java,设计模式,结构型,外观模式,对外提供一个一致的接口
- 2025-03-10 Java设计模式:适配器模式,干货总结
- 2025-03-10 Java设计模式:代理模式,干货总结
- 2025-03-10 「java设计模式」(7)——策略模式(案例解析)
- 2025-03-10 Java开发篇——设计模式(5)装饰设计模式
- 2025-03-10 快速上手Java设计模式之简介
- 2025-03-10 Java设计模式-享元模式
- 2025-03-10 Java设计模式系列之装饰器模式介绍
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)