持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
设计模式系列文章目录
如果本文对你们的开发之路有所帮助,请帮忙点个赞,您的支持是我坚持写博客的动力
前言
本系列课程将带着大家以面试题的方式 深入设计模式。这么快到了设计模式的第六篇啦,上一篇文章带着大家输入学习了设计模式的策略模式,这篇文章带着大家深入建造者模式
项目代码见 gitee.com/janyxe/desi…
建造者模式定义
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 同的表示
建造者模式是什么/建造者模式概念
建造者模式:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,即将复杂的对象分解为简单对象,然后一步步构建而成。
能画出建造者模式类图吗?并简单说明下
- Director: 导演类,负责已有模块顺序,并安排抽象建造者进行建造
- Builder: 抽象建造者,规范产品的组件,一般由子类实现
- ConcreteBuilder: 具体建造者,实现Builder(抽象建造者)定义的全部方法,并返回一个组装好的对象
- Product: 产品类,一般实现了模板方法模式
说说建造者模式优点
优点
- 1、封装性高:客户端不需要关心具体细节实现
- 2、易扩展:通过实现抽象建造者的方法可以扩展不同的业务需求
建造者模式代码实现
com.jany.builder.Director 导演类:负责已有模块顺序,并安排抽象建造者进行建造
/**
* 导演类:负责已有模块顺序,并安排抽象建造者进行建造
*/
public class Director {
private ProductBuilder productBuilder;
public Director(ProductBuilder productBuilder) {
this.productBuilder = productBuilder;
}
/**
* 构建商品
* @param part
* @return
*/
public Product buildProduct(String part){
productBuilder.buildPart(part);
return productBuilder.build();
}
}
com.jany.builder.ProductBuilder
抽象建造者,规范产品的组件,一般由子类实现
定义抽象方法
/**
* 抽象建造者,规范产品的组件,一般由子类实现
*/
public interface ProductBuilder {
/**
* 生产产品
*/
Product build();
/**
* 生产步骤
* @param part
*/
void buildPart(String part);
}
com.jany.builder.ConcreteProductBuilder 具体建造者,实现Builder(抽象建造者)定义的全部方法,并返回一个组装好的对象
/**
* 具体建造者,实现Builder(抽象建造者)定义的全部方法,并返回一个组装好的对象
*/
public class ConcreteProductBuilder implements ProductBuilder{
/**
* 生产过程
*/
private String part;
public void buildPart(String part) {
this.part = part;
}
public Product build() {
return new Product(part);
}
}
com.jany.builder.Product 产品类,一般实现了模板方法模式
/**
* 产品类,一般实现了模板方法模式
*/
public class Product {
private String part;
public Product(String part) {
this.part = part;
}
@Override
public String toString() {
return "Product{" +
"part='" + part + ''' +
'}';
}
}
com.jany.builder.BuilderApp 运行代码
public class BuilderApp {
public static void main(String[] args) {
ProductBuilder concreteProductBuilder = new ConcreteProductBuilder();
Director director = new Director(concreteProductBuilder);
Product product = director.buildProduct("生产步骤..");
System.out.println(product);
}
}
控制台输出
Product{part='生产步骤..'}