定义:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
特点:1.在某些属性没有赋值之前,复杂对象不能作为一个完整的产品使用。比如汽车包括方向盘、车门、发动机等各部件,缺少了这些部件就不能生产使用。
2.对象的一些属性必须按照顺序赋值,比如汽车应有车架才能装车轮和其他部件,有顺序的强调
// 产品类Product
class Product {
/**
* 定义一些关于产品的操作
*/
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;
}
}
// 抽象建造者类Builder
interface Builder {
public void buildPart1();
public void buildPart2();
public Product retrieveResult();
}
// 具体建造者类ConcreteBuilder
class ConcreteBuilder implements Builder{
private Product product=new Product();
@Override
public void buildPart1() {
//构建产品的第一个零件
product.setPart1("编号:9527");
}
@Override
public void buildPart2() {
// //构建产品的第二个零件
product.setPart2("名称:XXX");
}
@Override
public Product retrieveResult() {
return product;
}
}
// 导演者类Director
class Director {
/**
* 持有当前需要使用的建造器对象
*/
private Builder builder;
/**
* 构造方法,传入建造器对象
* @param builder 建造器对象
*/
public Director(Builder builder) {
this.builder = builder;
}
/**
* 产品构造方法,负责调用各个零件建造方法
*/
public void construct(){
builder.buildPart1();
builder.buildPart2();
}
}
public class BuilderModerDemo {
public static void main(String[] args){
Builder builder=new ConcreteBuilder();
Director director=new Director(builder);
director.construct();
Product product=builder.retrieveResult();
System.out.println(product.getPart1());
System.out.println(product.getPart2());
}
}
优点:(1)降低代码耦合度。在建造者模式中,客户端不需要知道产品内部是如何实现的,我们只需要得到产品的对象。并且使用导演者和建造者分离组装过程和组件具体构造过程,具有灵活的扩展性。
(2)优秀的扩展性。具体建造者相互独立,方便扩展,复合开闭原则
缺点:(1)一定的使用范围限制。建造者模式的产品的组件基本相同,如果产品的差异性较大,建造者模式就不适用了。
跟工厂模式对比:建造者模式和工厂模式同样是创建一个产品,工厂模式就是一个方法,而建造者模式有多个方法,并且建造者模式是有顺序的执行方法。就是说建造者模式强调的是顺序,而工厂模式没有顺序一说。
本文深入讲解建造者模式的定义、特点、实现代码及优缺点,通过汽车组装的例子,阐述了如何将复杂对象的构建与表示分离,以创建不同表示。
184

被折叠的 条评论
为什么被折叠?



