今天让我们一起来了解一下设计模式中的“建造者模式”!
建造者模式
简介
1、建造者模式也被称为生成器模式,是创建型模式的一种。
2、它的设计理念就是将对象的创造过程抽象出来,从而将对象的创建和表现进行分离。
3、建造者模式就是将一个大而复杂的对象进行拆分,通过多个小步骤来完成。
4、它允许客户端只通过指定对象的类别和内容就可以创建出一个对象,用户不需要知道内部的具体构建细节。
建造者模中的四个角色:
1、产品角色:一个具体的产品对象。
2、抽象建造者:定义创建一个产品对象的各个部件的方法,不管具体创建细节。
3、具体建造者:实现抽象建造者,并实现其抽象方法。
4、指挥者:构建一个使用抽象建造者的对象。指挥者主要用于创建一个复杂的对象。其两大作用:一是隔离客户与对象的生成过程;二是负责控制产品对象的生产过程。
代码演示
单纯的通过文字描述,可能大家对建造者模式的了解还是不太清楚。下面让我们通过一个小小的创建手机案例来加深对该模式的印象。
手机类 => 对应产品角色
public class MobilePhone {
// 主板
private String motherboard;
// 电池
private String battery;
// 外壳
private String shell;
// ...get()和set()
}
手机建造抽象类 => 对应抽象建造者
public abstract class MobilePhoneBuilder {
protected MobilePhone mobilePhone = new MobilePhone();
// 创建主板
public abstract void buildMotherboard();
// 创建电池
public abstract void buildBattery();
// 创建外壳
public abstract void buildShell();
// 获取手机
public MobilePhone getMobilePhone() {
System.out.println("获得一台手机!");
return mobilePhone;
}
}
智能手机 => 对应具体建造者
public class IntelligentMobilePhone extends MobilePhoneBuilder {
@Override
public void buildMotherboard() {
System.out.println("生产智能手机主板!");
}
@Override
public void buildBattery() {
System.out.println("生产智能手机电池!");
}
@Override
public void buildShell() {
System.out.println("生产智能手机外壳!");
}
}
手机建造指挥者 => 对应指挥者
public class MobilePhoneDirector {
private MobilePhoneBuilder mobilePhoneBuilder = null;
// 通过构造器设置MobilePhoneBuilder
public MobilePhoneDirector(MobilePhoneBuilder mobilePhoneBuilder) {
this.mobilePhoneBuilder = mobilePhoneBuilder;
}
// 通过set方法设置MobilePhoneBuilder
public void setMobilePhoneBuilder(MobilePhoneBuilder mobilePhoneBuilder) {
this.mobilePhoneBuilder = mobilePhoneBuilder;
}
/**
* 组装手机
*/
public MobilePhone assemblingMobilePhone() {
this.mobilePhoneBuilder.buildMotherboard();
this.mobilePhoneBuilder.buildBattery();
this.mobilePhoneBuilder.buildShell();
return this.mobilePhoneBuilder.getMobilePhone();
}
}
测试类:
public class Test {
public static void main(String[] args) {
// 创建手机建造指挥者
MobilePhoneDirector mobilePhoneDirector = new MobilePhoneDirector(new IntelligentMobilePhone());
// 组装手机
mobilePhoneDirector.assemblingMobilePhone();
}
}
总结
1、建造者模式的好处在于,创建一些复杂的大型对象时,客户端不必知道产品的组成细节,将产品和产品创建过程进行解耦,使用相同的创建过程可以得到不同的产品。
2、用户使用不同的建造者就可以得到不同的产品。因为每一个具体的建造者都是相对独立,这样的现象就促使程序可以很方便的替换和新增具体建造者。并且当新增产品时也无需修改原有的代码(符合开闭原则)。
3、通过建造者模式可以将相对复杂的产品类创建步骤分解在不同的方法中,使得创建过程更加清晰,也更有利于控制产品的创建过程。
4、当产品类具有较多的共同点,其组成部分相似,并且创建过程相对复杂时可以考虑使用。
5、如果产品之间的差异性很大,就不适合使用该模式了。
6、如果产品内部变化复杂,会导致需要定义多个具体建造类来适应这些变化,此时就要慎重考虑是否在使用建造者模式了。
今天的分享就到这里了,如果感觉“菜鸟”写的文章还不错,记得点赞加关注呦!你们的支持就是我坚持下去的动力。文章哪里写的有问题的也希望大家可以指出,我会虚心受教。