Builder builder = new ConcreteBuilder();
//构造者设置/构造产品的不同部分
builder.setPart1(“param1”);
builder.setPart2(“param2”);
builder.setPart3(“param3”);
//构造者返回一个产品对象
Product product = builder.buildProduct();
//使用产品对象
System.out.println(product.getPart1());
System.out.println(product.getPart2());
System.out.println(product.getPart3());
}
}
在上面的代码中,ConcreteBuilder的内部是首先创建好了一个Product对象,然后外部调用的时候会将各部分的参数设置给product对象,但是有时我们的Product构造函数是有必传参数的,就是必须传递参数才能构造产品对象,这时可以改造ConcreteBuilder如下:
public class ConcreteBuilder implements Builder {
private String part1;
private String part2;
private String part3;
@Override
public void setPart1(String param) {
this.part1 = param;
}
@Override
public void setPart2(String param) {
this.part2 = param;
}
@Override
public void setPart3(String param) {
this.part3 = param;
}
@Override
public Product buildProduct() {
return new Product(this.part1, this.part2, this.part3);
}
}
也就是说这种情况下是在buildProduct()被调用的时候才真正创建产品对象。
建造者模式在很多开源库中是很常见的模式,由于我是做Android开发的,在Android领域有很多开源库或者Android系统的api都是采用建造者模式,进一步,我们将Builder代码再稍微调整下:
public interface Builder {
public Builder setPart1(String param);
public Builder setPart2(String param);
public Builder setPart3(String param);
public Product buildProduct();
}
public class ConcreteBuilder implements Builder {
private String part1;
private String part2;
private String part3;
@Override
public ConcreteBuilder setPart1(String param) {
this.part1 = param;
return this;
}
@Override
public ConcreteBuilder setPart2(String param) {
this.part2 = param;
return this;
}
@Override
public ConcreteBuilder setPart3(String param) {
this.part3 = param;
return this;
}
@Override
public Product buildProduct() {
return new Product(this.part1, this.part2, this.part3);
}
}
public class Client {
public static void main(String[] args) {
//创建构造者
Builder builder = new ConcreteBuilder();
//构造者设置/构造产品的不同部分
Product product = builder.setPart1(“param1”)
.setPart2(“param2”)
.setPart3(“param3”)
.buildProduct();
//使用产品对象
System.out.println(product.getPart1());
System.out.println(product.getPart2());
System.out.println(product.getPart3());
}
}
如果你是做Android开发的同学,相信你已经看到了熟悉的代码,没错,就是链式调用的Builder模式,这种形式让书写更加方便,由于每次调用返回的是同一个对象,因此这样写也不违背迪米特法则。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
总结
【Android 详细知识点思维脑图(技能树)】
我个人是做Android开发,已经有十来年了,目前在某创业公司任职CTO兼系统架构师。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
详细整理在GitHub可以见;
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
以图片的形式给大家展示一小部分。
[外链图片转存中…(img-xuEk6ZY3-1711088676912)]
详细整理在GitHub可以见;
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
最后,赠与大家一句话,共勉!