网站首页 > java教程 正文
建造者模式定义:
建造者模式(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());
}
}
猜你喜欢
- 2025-03-30 Java设计模式在实际开发中的奇妙应用
- 2025-03-30 JAVA设计模式之策略模式(java 策略设计模式)
- 2025-03-30 Java设计模式在实际项目中的精彩运用
- 2025-03-30 Java设计模式在实际项目中的应用(java设计模式的作用)
- 2025-03-30 Java设计模式实战案例解析(java中设计模式到底是干啥的)
- 2025-03-30 Java程序员必备的设计模式:轻松构建优雅的代码架构
- 2025-03-30 从零学习 Java 设计模式(java设计模式及实践)
- 2025-03-30 Java设计模式之单例模式:独孤求败的编程艺术
- 2025-03-30 java设计模式之模板设计模式_V1(java设计模式详解)
- 2025-03-30 Java设计模式系列:轻松掌握单例模式的最佳实践
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)