想成为高级Android工程师其中熟悉常见的设计模式是必不可少的,这个也是我面试一线互联网公司的深刻体会,首先我们现在介绍最基础也是最常用的设计模式:建造(Builder)模式
建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 抽象建造者角色:提供一个接口,规范产品对象的建造,一般由子类实现。一般来说,产品的组成部分数与建造方法数相同,即有多少组成部分,就有多少个建造方法。
- 具体建造者角色:该角色实现了抽象建造者抽象建造者接口,主要是实现所有声明的方法以及返回建造好的产品实例。
- 导演者角色:负责调用具体建造者按照顺序建造产品。导演者只负责调度,真正执行的是具体建造者角色。
- 产品角色:该角色是建造的复杂对象,提供基本方法。
使用场景:
1、需要生成的对象具有复杂的内部结构。
2、需要生成的对象内部属性本身相互依赖。
应用实例:
1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的”套餐”。
2、JAVA 中的 StringBuilder。
一、实例生成汽车 产品
//产品角色
public class Production {
private String part1;
private String part2;
public String getPart1() {
return part1;
}
public void setPart1(String part1) {
this.part1 = part1;
}
public String getPart2() {
return part2;
}
public void setPart2(String part2) {
this.part2 = part2;
}
}
二、建造者
//抽象建造者角色
public interface IBuilder {
// 产品有多少个组件,就有多少个建造方法
public void buildPart1();
public void buildPart2();
// 返回产品类
public Production build();
}
//建造者实现(注意建造者不一样时(即不同组合),产品是不一样的)
public class BuilderA implements IBuilder {
private Production production = new Production();
@Override
public void buildPart1() {
System.out.println("构造兰博基尼的第一部分。");
production.setPart1("This is part1 of Lamborghini");
}
@Override
public void buildPart2() {
System.out.println("构造兰博基尼的第二部分。");
production.setPart2("This is part2 of Lamborghini");
}
@Override
public Production build() {
System.out.println("咔擦!兰博基尼已造好!");
return production;
}
}
三、导演者
public class Director {
private IBuilder builder;
public Director(IBuilder builder){
this.builder = builder;
}
/**
* 构造顺序
*/
public Production construct(){
builder.buildPart1();
builder.buildPart2();
return builder.build();
}
}
四、测试模块
public class Client {
public static void main(String[] args){
// 兰博基尼
IBuilder builderA = new BuilderA();
Director directorA = new Director(builderA);
directorA.construct();
}
}
五、总结
优点
1)降低代码耦合度。在建造者模式中,客户端不需要知道产品内部是如何实现的,我们只需得到产品的对象。并且使用导演者和建造者分离组装过程和组件具体构造过程,具有灵活的扩展性。
2)优秀的扩展性。具体建造者相互独立,方便扩展,符合开闭原则。
缺点
1)一定的使用范围限制。建造者模式的产品的组件基本相同,如果产品的差异性较大,建造者模式就不适用了。
资料引用 https://segmentfault.com/a/1190000011513517