建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式(创建型),可以将复杂对象的建造过程抽象出来(抽象类),使这个抽象过程的不同实现方法能构造出不同表现(属性)的对象。
建造模式允许用户只通过指定复杂对象的类型和内容就可以构建他们,用户不需要知道内部的具体构建细节。
建造者模式的四个角色:
- Product产品:一个具体产品对象;
- Builder(抽象建造者):创建Product对象指定的 接口或者抽象类;
- ConcreteBuilder具体建造者:实现接口,构建和装配各个部件;
- Director指挥者:构建一个使用Builder接口的对象,主要用于创建一个复杂度对象,有两个作用:一是隔离客户与对象的生产过程,二是负责控制产品对象的生产过程。
他们之间的关系,我们用类图来解释:
- Directer里面聚合一个Builder实际上使用的是他的实现类ConcreteBuilder;
- ConcreteBuilder可以有很多,就是所谓的不同的房子的建造者。
因为getRusult是一样的,所以暂时不用接口,用抽象类实现Builder,代码如下:
/*
产品,对应product
*/
public class House {
private String base;
private String wall;
private String roof;
//对应getset方法
}
/*
抽象的建造者,对应Builder
*/
public abstract class HouseBuilder {
protected House house = new House();
//写好流程的各个方法,但不约束具体执行
public abstract void buildBasic();
public abstract void buildWalls();
public abstract void buildRoof();
//建造方法,返回建造结果
public House buildHouse(){
return house;
}
}
/*
普通房子制造流程,继承抽象类
可以看到,制造流程在这里,而House类拥有房子的属性,他们是分开的
应是对House的操作,这里省略
*/
public class CommonHouse extends HouseBuilder{
@Override
public void buildBasic() {
System.out.println(“普通房子:建造地基。。。”);
}
@Override
public void buildWalls() {
System.out.println(“普通房子:砌墙。。。”);
}
@Override
public void buildRoof() {
System.out.println(“普通房子:盖屋顶。。。”);
}
}
/*
另一个实现类,本来应是对House的操作,这里省略
*/
public class HighHouse extends HouseBuilder {
@Override
public void buildBasic() {
System.out.println(“高楼:建造地基。。。”);
}
@Override
public void buildWalls() {
System.out.println(“高楼:砌墙。。。”);
}
@Override
public void buildRoof() {
System.out.println(“高楼:盖屋顶。。。”);
}
}
/*
Director,聚合建造者HouseBuilder
同时决定制作流程,最后调用建造者的buildHouse方法返回
*/
public class Director {
HouseBuilder houseBuilder = null;
//通过构造器聚合
public Director(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
//通过setter方法聚合
public void setHouseBuilder(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
//指挥具体建造流程,先后顺序不由Builder决定
public House constructHouse(){
houseBuilder.buildBasic();
houseBuilder.buildWalls();
houseBuilder.buildRoof();
return houseBuilder.buildHouse();
}
}
/*
客户端
*/
public class Client {
public static void main(String[] args) {
//new房子
CommonHouse commonHouse = new CommonHouse();
//new指挥者
Director director = new Director(commonHouse);
//完成盖房
House house = director.constructHouse();
//重置建造者
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/29a79af96ca15cf32ffc538871c24d75.jpeg)
本次面试答案,以及收集到的大厂必问面试题分享:
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
R2mYAnea-1712994430313)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!