【设计模式系列11】建造者模式原理和示例及其在jdk,MyBatis源码中的运用

面试资料整理汇总

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 建造者(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(“简单题目”);//1

simpleBuilder.buildNormalQc(“标准难度题目”);//2

simpleBuilder.buildMediumQc(“中等难度题目”);//3

simpleBuilder.buildHardQc(“高难度题目”);//4

Homework homework = simpleBuilder.build();

System.out.println(JSONObject.toJSONString(homework));

}

}

这就是一个简单的构造者模式写法,上面的1,2,3,4行代码可以只选择任意1个或者任意搭配的个数,从而创造出独立不同的产品。

这种写法虽然简单,但是因为不是面向抽象编程,导致扩展性不好,所以我们再继续看一下建造者模式标准的写法

标准写法示例

===================================================================

1、产品(Product)


产品类复用上面简单示例的产品类

2、抽象建造者(Builder)


创建一个抽象建造者:

package com.zwx.design.pattern.builder.standard;

import com.zwx.design.pattern.builder.Homework;

/**

  • 建造者模式-抽象建造者(Builder)

*/

public abstract class HomeworkBuilder {

public abstract HomeworkBuilder buildEasyQc(String easyQc);

public abstract HomeworkBuilder buildNormalQc(String normalQc);

public abstract HomeworkBuilder buildMediumQc(String mediumQc);

public abstract HomeworkBuilder buildHardQc(String hardQc);

public abstract Homework build();

}

这个类定义了5个方法,前面4个是产品类,实际开发中可以任意定义,相当于一个方法就是一个产品中的某一个部分,然后最后一个方法就是返回一个构建好的产品。

3、建造者(ConcreteBuilder)


创建一个实际的建造者角色类:

package com.zwx.design.pattern.builder.standard;

import com.zwx.design.pattern.builder.Homework;

/**

  • 建造者模式-具体建造者(ConcreteBuilder)

*/

public class ConcreateBuilder extends HomeworkBuilder {

private Homework homework;

public ConcreateBuilder(Homework homework) {

this.homework = homework;

}

@Override

public HomeworkBuilder buildEasyQc(String easyQc) {

homework.setEasyQc(easyQc);

return this;

}

@Override

public HomeworkBuilder buildNormalQc(String normalQc) {

homework.setNormalQc(normalQc);

return this;

}

@Override

public HomeworkBuilder buildMediumQc(String mediumQc) {

homework.setMediumQc(mediumQc);

return this;

}

@Override

public HomeworkBuilder buildHardQc(String hardQc) {

homework.setHardQc(hardQc);

return this;

}

@Override

public Homework build() {

return homework;

}

}

这个类里面初始产品我们是通过构造器传进去,实际上也可以不传,通过其他方法初始化也是可以的,这个看需求或者个人喜好。

注意:每个创建部分产品最后的返回值返回的都是this,这样就可以实现链式写法,具体看下面的调用者写法

4、调用者(Director)


最后

经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。







由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

[外链图片转存中…(img-2RfqqUhj-1715488655038)]
[外链图片转存中…(img-Y1E3zhFb-1715488655038)]
[外链图片转存中…(img-xUr1chHL-1715488655039)]
[外链图片转存中…(img-TDw7WYW9-1715488655039)]
[外链图片转存中…(img-Op60mGzR-1715488655039)]

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值