JAVA设计模式:建造者模式原理与代码理解

简介: JAVA设计模式:建造者模式原理与代码理解

1、概念


建造者模式:将复杂对象的构造与它的实现相分离,让相同的构建过程可以创建不同的对象。


适用场合:复杂对象的算法应该独立于该对象的组成部分或当构造过程允许被构造不同的对象时。


组成角色:


  1. 创建者(Builder)接口:为创建一个对象的对应部件所指定抽象接口。


  1. 具体创建者(ConcreteBuilder):实现Builder的接口以构造对象的各个部件。


  1. 具体创建者管理对象(Director):使用Builder接口的对象。


  1. 复杂产品对象(Product):被构造的复杂对象。


2、代码理解


拿小汽车生产过程为例子


创建者:


/**
 * 生产汽车:创建者Builder接口
 */
public interface CarBuilder {
  void carRoof();//生产车顶
  void carBottom();//生产车底盘
  void carWheel();//生产车轮
  Car buildCar();
}


具体创建者


/**
 * 具体创建对象ConcreteBuilder:白色汽车
 */
public class WhiteCar implements CarBuilder {
  Car car;
  public WhiteCar() {
    car = new Car();
  }
  @Override
  public void carRoof() {
    car.setRoof("制造白色汽车---车顶");
  }
  @Override
  public void carBottom() {
    car.setBottom("制造白色汽车---车底");
  }
  @Override
  public void carWheel() {
    car.setWheel("制造白色汽车---车轮");
  }
  @Override
  public Car buildCar() {
    // TODO Auto-generated method stub
    return car;
  }
}


具体创建者管理对象


/**
 * 具体创建者管理对象(Director),建造者
 */
public class CarDirector {
  public Car constructPerson(CarBuilder carBuilder) {
    carBuilder.carRoof();
    carBuilder.carBottom();
    carBuilder.carWheel();
    return carBuilder.buildCar();
  }
}


复杂产品对象


/**
 * 最终生产的'复杂产品'对象
 */
public class Car {
  private String roof;// 车顶
  private String bottom;// 车底
  private String wheel;// 车轮
  public String getRoof() {
    return roof;
  }
  public void setRoof(String roof) {
    this.roof = roof;
  }
  public String getBottom() {
    return bottom;
  }
  public void setBottom(String bottom) {
    this.bottom = bottom;
  }
  public String getWheel() {
    return wheel;
  }
  public void setWheel(String wheel) {
    this.wheel = wheel;
  }
}


测试代码:


public class Test {
  public static void main(String[] args) {
    CarDirector carDirector = new CarDirector();
    Car car = carDirector.constructPerson(new WhiteCar());
    System.out.println(car.getRoof());
    System.out.println(car.getBottom());
    System.out.println(car.getWheel());
    System.out.println("----整个车子就完成了!--");
  }
}


运行结果如下:


相关文章
|
5天前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
24 6
|
3天前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
11 2
|
6天前
|
设计模式 安全 Java
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
19 1
|
4天前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
【7月更文挑战第11天】页面对象模型(POM)通过Page Factory在Java Selenium测试中被应用,简化了代码维护。在POM中,每个网页对应一个Page Class,其中包含页面元素和相关操作。对比之下,非POM实现直接在测试脚本中处理元素定位和交互,代码可读性和可维护性较低。
|
5天前
|
Java 编译器 API
Java中的Lambda表达式:简化代码,提升性能
在Java 8中,Lambda表达式的引入为开发者提供了一种更加简洁、灵活的编程方式。本文将深入探讨Lambda表达式的概念、语法、使用场景及其在Java中的应用示例,帮助读者更好地理解和掌握这一强大工具,从而优化代码结构,提高开发效率。
|
6天前
|
设计模式 存储 缓存
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
8 0
|
6天前
|
设计模式 缓存 安全
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
7 0
|
6天前
|
设计模式 并行计算 安全
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
12 0
|
6天前
|
设计模式 安全 Java
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
15 0
|
设计模式 缓存 Java
【Java设计模式】用盖房子案例讲解建造者模式(生成器模式)
【Java设计模式】用盖房子案例讲解建造者模式(生成器模式)
【Java设计模式】用盖房子案例讲解建造者模式(生成器模式)