首页 > 代码库 > 设计模式学习--Builder
设计模式学习--Builder
What
Builder:将一个复杂的对象的构建和表示分离,使得同样的构建过程可以创建不同的表示。
Why
Builder也是创建型模式的一种,它是一步一步的向导式的创建一个复杂的对象,Builder接口定义创建复杂对象的零部件,Director根据客户端端传入的builder按照一定的步骤创建完成复杂对象的创建。
Builder适用于比较复杂的对象的创建,该对象的创建有比较稳定的步骤或者比较稳定的“零件”,但是“零件”(步骤)内部的构建是复杂多变的。
设计模式书中Builder适用于如下情况:
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同的表示时。
How
假设如下场景,需要构造一个汽车类,汽车有轮子,方向盘,发动机,不同品牌的汽车零件算法不同。以此为示例,使用builder模式实现。
汽车builder接口
public abstract class CarBuilder {
protected Car car=null;
public abstract void buildWheel();
public abstract void buildEngine();
public abstract void buildSteeringWheel();
public Car getResult(){
return car;
}
}
Jeep汽车builder实现
public class JeepCarBuilder extends CarBuilder {
@Override
public void buildWheel() {
System.out.println("construct jeep car wheel");
}
@Override
public void buildEngine() {
System.out.println("construct jeep car engine");
}
@Override
public void buildSteeringWheel() {
System.out.println("construct jeep car steering wheel");
}
}
Chery汽车builder实现
public class CheryCarBuilder extends CarBuilder {
@Override
public void buildWheel() {
System.out.println("construct chery car wheel");
}
@Override
public void buildEngine() {
System.out.println("construct chery car engine");
}
@Override
public void buildSteeringWheel() {
System.out.println("construct chery steering wheel");
}
}
Director实现
public class CarDirector {
private CarBuilder builder;
public CarDirector(CarBuilder builder){
this.builder=builder;
}
public Car construct(){
builder.buildSteeringWheel();
builder.buildEngine();
builder.buildWheel();
return builder.getResult();
}
}
Client调用
public class App {
public static void main( String[] args ){
CarBuilder builder=new JeepCarBuilder();
CarDirector director=new CarDirector(builder);
director.construct();
CarBuilder builder1=new CheryCarBuilder();
CarDirector director1=new CarDirector(builder1);
director1.construct();
}
}
本示例类图如下:
Discuss
Builder模式的好处是使建造代码与表示代码分离,如果需要增加系列产品,只需要增加相应的builder接口实现即可,如果需要改变产品的表示,也只需修改builder接口的实现即可。
在jdk中,StringBuilder是一个简易版的builder模式,其中StringBuilder充当了builder以及construct的角色,Client充当了Director。
类图如下(来自happyhippy‘s Blog):
Reference
1、Builder模式的误区:将复杂对象的构建进行封装,就是Builder模式了吗?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。