给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
当需要创建的对象非常复杂时,我们可以使用接口抽取出某些对象的相同创建过程,将创建过程交由具体的实现类来完成,这样就可以使得相同的创建行为可以创建出不同的对象,分离了创建过程与具体表现,使得创建产品的灵活性大大增加。
建造者设计模式(Builder Pattern):将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示;
- 语义解释:
- 什么是构建:构建就是指对象的创建
- 什么是表示:泛指对象的属性,行为等
- 什么是构建与表示分离:其实就是使用接口来规定其行为,然后使用具体的实现类来创建对象。使用实现类来构建,使用接口来规定其表示行为(达到构建与表示分离)
- 同样的构建过程创建不同的表示:创建的过程由接口来规范,具体创建过程的实现由子类来完成,这样不同的子类使用相同的创建过程可以创建出不同的对象;
7.2 建造者设计模式的实现
7.2.1 案例引入
我们完成某些产品的创建需要N多个步骤(创建过程复杂),这些步骤都趋向于稳定,不会变化(相同的创建过程);
例如我们在组装游戏台式机时,需要安装顶级显卡,性能一般但主频高的CPU;组装商务台式机时,只需要安装一个亮机卡,再加一个顶级CPU;但是都需要安装显卡和CPU以及一些其他部件;创建产品的步骤趋向稳定(都需要安装CPU和显卡等部件),但是需要创建不同的对象表示(游戏台式机和商务台式机);
1)UML类图如下:
2)建造者设计模式中的角色
在建造者设计模式中主要包含有4个角色:
- 1)产品(Product):要创建的复杂对象。
- 2)抽象建造者(Builder):规范要创建对象的步骤,具体的实现由具体的子类来完成。
- 3)具体建造者(ConcreteBuilder):抽象建造者的具体实现,根据不同的业务类型,来具体化创建对象的每个步骤。
- 4)指挥者(Director):调用具体建造者的每一个步骤来完成对象的创建,指挥者并不知道产品的细节;
7.2.2 代码实现
- 电脑类:
package com.pattern.demo01\_建造者设计模式;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/\*\*
\* @author lscl
\* @version 1.0
\* @intro:
\*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Computer {
private String memory;
private String cpu;
private String keyBoard;
private String mouse;
}
- 抽象构建者:
package com.pattern.demo01\_建造者设计模式;
/\*\*
\* @author lscl
\* @version 1.0
\* @intro: 抽象构建者
\*/
public abstract class Builder {
protected Computer computer=new Computer();
// 抽象每一个步骤
public abstract void addMemory();
public abstract void addCPU();
public abstract void addKeyBoard();
public abstract void addMouse();
public abstract Computer createComputer();
}
- 具体构建者-游戏台式机构建者类:
package com.pattern.demo01\_建造者设计模式;
/\*\*
\* @author lscl
\* @version 1.0
\* @intro: 游戏台式机构建者
\*/
public class GameBuilder extends Builder {
// 实现每一个构建步骤
@Override
public void addMemory() {
computer.setMemory("添加16G内存条!");
}
@Override
public void addCPU() {
computer.setCpu("添加i5 12600K!");
}
@Override
public void addKeyBoard() {
computer.setKeyBoard("添加游戏专用机械键盘!");
}
@Override
public void addMouse() {
computer.setMouse("添加游戏专用宏鼠标!");
}
@Override
public Computer createComputer() {
return computer;
}
}
- 具体构建者-商务台式机构建者类:
package com.pattern.demo01\_建造者设计模式;
/\*\*
\* @author lscl
\* @version 1.0
\* @intro: 商务台式机构建者类
\*/
public class BusinessBuilder extends Builder {
// 实现每一个构建步骤
@Override
public void addMemory() {
computer.setMemory("添加32G内存条!");
}
@Override
public void addCPU() {
computer.setCpu("添加i9 12900K!");
}
@Override
public void addKeyBoard() {
computer.setKeyBoard("添加办公专用双飞燕键盘!");
}
@Override
public void addMouse() {
computer.setMouse("添加办公专用双飞燕鼠标!");
}
@Override
public Computer createComputer() {
return computer;
}
}
- 指挥者类:
package com.pattern.demo01\_建造者设计模式;
/\*\*
\* @author lscl
\* @version 1.0
\* @intro: 指挥者类
\*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
/\*\*
\* 调用每一个步骤来完成对象的构建
\*
\* @return
\*/
public Computer construct() {
builder.addMemory();
builder.addCPU();
builder.addKeyBoard();
builder.addMouse();
return builder.createComputer();
}
}
在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
7.2.3 建造者模式的链式写法
在普通建造者模式中,创建对象的方式被固定在了Director类中,不能再改变,对于一些创建过程需要变化的对象普通建造者模式将会变得难以维护,因此在实际开发中,我们通常使用建造者模式的链式写法来简化对象的创建过程;它允许我们自己定义创建对象的过程,并最终将创建好的对象返回;
- 产品类:
package com.pattern.demo02\_链式写法;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/\*\*
\* @author lscl
\* @version 1.0
\* @intro:
\*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Computer {
private String memory;
private String cpu;
private String keyBoard;
private String mouse;
}
- 构建者类:
package com.pattern.demo02\_链式写法;
/\*\*
\* @author lscl
\* @version 1.0
\* @intro:
\*/
public class ComputerBuilder {
private Computer computer=new Computer();
public ComputerBuilder addMemory(String memory) {
computer.setMemory(memory);
return this;
}
public ComputerBuilder addCPU(String cpu) {
computer.setCpu(cpu);
return this;
}
public ComputerBuilder addKeyBoard(String keyBoard) {
computer.setKeyBoard(keyBoard);
return this;
}
public ComputerBuilder addMouse(String mouse) {
computer.setMouse(mouse);
return this;
}
public Computer build() {
return computer;
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
***93道网络安全面试题***
![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)
![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)
![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)
内容实在太多,不一一截图了
### 黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
😝朋友们如果有需要的话,可以联系领取~
#### 1️⃣零基础入门
##### ① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。
![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)
##### ② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)
#### 2️⃣视频配套工具&国内外网安书籍、文档
##### ① 工具
![](https://img-blog.csdnimg.cn/img_convert/d3f08d9a26927e48b1332a38401b3369.png#pic_center)
##### ② 视频
![image1](https://img-blog.csdnimg.cn/img_convert/f18acc028dc224b7ace77f2e260ba222.png#pic_center)
##### ③ 书籍
![image2](https://img-blog.csdnimg.cn/img_convert/769b7e13b39771b3a6e4397753dab12e.png#pic_center)
资源较为敏感,未展示全面,需要的最下面获取
![在这里插入图片描述](https://img-blog.csdnimg.cn/e4f9ac066e8c485f8407a99619f9c5b5.png#pic_center)![在这里插入图片描述](https://img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png#pic_center)
##### ② 简历模板
![在这里插入图片描述](https://img-blog.csdnimg.cn/504b8be96bfa4dfb8befc2af49aabfa2.png#pic_center)
**因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆**
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**