什么是建造者模式?他在jdk、MyBatis源码怎么运用?

推荐学习

  • “23种设计模式知识要点”都没读通过 , 还有脸说摸不清搞不懂?
  • 闭关28天 , 奉上[Java一线大厂高岗面试题解析合集] , 备战金九银十

什么是建造者模式?他在jdk、MyBatis源码怎么运用?文章插图
前言当我们创建一个复杂对象时 , 可能大家的第一反应就是使用工厂模式 。 但是如果构建一个对象非常复杂 , 而且有些比如说属性之类的是可选的 , 而且需要支持我们自己随意的动态搭配 , 那么这时候如果要用工厂设计模式就不太好实现了 , 所以这就需要配合我们的建造者模式来实现 。
什么是建造者模式建造者模式(Builder Pattern)是将一个复杂的对象的构建与它的表示分离 , 使得同样的构建过程可以创建不同的表示 。
建造者模式属于创建型模式 , 对使用者而言 , 只需要指定需要建造的类型就可以获得对象 , 建造过程和细节不需要了解 。
建造者模式的概念听上去有点抽象 , 但是实际上可以这么说 , 基本上大家都用过 , 只是可能自己不知道这就是建造者模式而已 。 后面分析jdk源码中的应用大家就会知道了
建造者模式角色建造者模式的设计中 , 主要有4个角色 。
  • 产品(Product):要创建的产品对象
  • 抽象建造者(Builder):建造者的抽象类 , 规范产品对象的各个组成部分的建造 , 一般由子类实现具体建造过程
  • 建造者(ConcreteBuilder):具体的Builder类 , 根据不同的业务逻辑 , 具体到各个对象的各个组成部分的建造
  • 调用者(Director):调用具体的建造者来创建各个对象的各个部分
简单写法示例我们先来看一个简单的建造者模式写法:
1、产品(Product)首先我们创建一个产品 , 我们以家庭作业为例 , 假设老师会根据每个不同基础的同学布置不同难度的题目为例
package com.zwx.design.pattern.builder;/** * 建造者模式-产品(Product)角色 */public class Homework {private String easyQc;//简答题目private String normalQc;//正常题目private String MediumQc;//中等难度题目private String HardQc;//困难题目public String getEasyQc() {return easyQc;}public void setEasyQc(String easyQc) {this.easyQc = easyQc;}public String getNormalQc() {return normalQc;}public void setNormalQc(String normalQc) {this.normalQc = normalQc;}public String getMediumQc() {return MediumQc;}public void setMediumQc(String mediumQc) {MediumQc = mediumQc;}public String getHardQc() {return HardQc;}public void setHardQc(String hardQc) {HardQc = hardQc;}}2、建造者(ConcreteBuilder)接下来再创建一个建造者 , 通过建造者来创建不同的产品
package com.zwx.design.pattern.builder.simple;import com.zwx.design.pattern.builder.Homework;/** * 建造者模式-具体建造者(ConcreteBuilder) */public class SimpleBuilder {private Homework homework;public SimpleBuilder(Homework homework) {this.homework = homework;}public void buildEasyQc(String easyQc){homework.setEasyQc(easyQc);}public void buildNormalQc(String normalQc){homework.setNormalQc(normalQc);}public void buildMediumQc(String mediumQc){homework.setMediumQc(mediumQc);}public void buildHardQc(String hardQc){homework.setHardQc(hardQc);}public Homework build(){return homework;}}3、调用者(Director)最后 , 通过调用者来构建不同的产品
package com.zwx.design.pattern.builder.simple;import com.alibaba.fastjson.JSONObject;import com.zwx.design.pattern.builder.Homework;/** * 建造者模式-调用者(Director) */public class SimpleBuilderDirector {public static void main(String[] args) {SimpleBuilder simpleBuilder = new SimpleBuilder(new Homework());simpleBuilder.buildEasyQc("简单题目");//1simpleBuilder.buildNormalQc("标准难度题目");//2simpleBuilder.buildMediumQc("中等难度题目");//3simpleBuilder.buildHardQc("高难度题目");//4Homework homework = simpleBuilder.build();System.out.println(JSONObject.toJSONString(homework));}}