写点什么

建造者模式,2021 最新网易 Android 面经

用户头像
Android架构
关注
发布于: 刚刚

public static void main(String[] args) {


//创建构造者


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 模式,这种形式让书写更加方便,由于每次调用返回的是同一个对象,因此这样写也不违背迪米特法则。


建造者模式的优点


  • 将一个复杂对象的创建过程封装起来。

  • 允许对象通过多个步骤来创建,井且可以改变过程(这和只有一个步骤的工厂模式不同)


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码



  • 向客户隐藏产品内部的表现。

  • 产品的实现可以被替换,因为客户只看到一个抽象的接口。


建造者模式的用途和缺点


  • 经常被用来创建组合结构。与工厂模式相比,采用建造者模式创建对象的客户,需要具备更多的领城知识。

  • 相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。

  • 产品类柞常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适。


参考:


用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
建造者模式,2021最新网易Android面经