设计模式----建造者模式

本文介绍了建造者模式,它用于创建复杂多变对象,以造房子为例说明其应用,指出原始创建方式易出错,引出指挥者角色。还对比了建造者模式和工厂模式,强调建造者注重构建过程把控,产品有部分相似流程,而工厂模式不关注此点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建造者模式

建造者模式,是为创建复杂且又多变的对象,而诞生的一种模式。

我们先整理一下,这样复杂的一个对象,想创建它又哪些难点:1、创建步骤繁杂,2、子类特别多。

我就以造房子为例,一步一步地将建造者模式融入到我们的代码当中。我们找到了一个专门造套房的团队,他们会打地基,会砌墙,会铺电线,会打孔,会铺砖...各种各样的技能。那么最原始的方法,就是我们拿到这个团队,然后按造房子的步骤走,例子如下(这是反面典型):


 
public class Customer {

public static void main(String[] args) {

Builder builder = new Builder();

//打地基

builder.diji();

//铺砖

builder.puzhuan();

//铺电线

builder.pudianxian();

//上油漆

builder.youqi();

//拿到房子

Product product = builder.getProduct();

}

}

如果我们下次不造套房了,改成造别墅。那么就换一个造别墅的团队,再重复上面的步骤。那么问题来了,因为步骤很复杂,万一哪天弄糊涂了,在叫他们铺电线钱,就让他们把油漆上了...这种麻烦的事情每次都要自己去一步一步走下去,迟早是会出问题的。所以我们需要有一个专业的,绝对不会出错的人士来代替我们去指挥,这个就是建造者模式。

第一步、

      来一个指挥者,他精通建筑物的建造流程,知道怎么指挥:


 
public class Director {

private Builder builder;

public Director(Builder builder) {

this.builder = builder;

}

public Product direct() {

//打地基

builder.diji();

//铺砖

builder.puzhuan();

//铺电线

builder.pudianxian();

//上油漆

builder.youqi();


return builder.getProduct();

}

}

第二步、

       创建一个消费者,消费者顾一批施工团队,给指挥者去指挥

public class Customer {

public static void main(String[] args) {

Director director = new Director(new ABuilder());

//拿到房子

Product product = builder.getProduct();

}

}

第三步、

       这个Builder类,也就是我们的施工队,可以有很多种,所以Builder是一个接口,底下有各种实现类,至于Product类请自行脑补一个:

public abstract class Builder {

protected abstract void diji();

protected abstract void puzhuan();

protected abstract void pudianxian();

protected abstract void youqi();

protected abstract Product getProduct();

}

---------------------------------------------------------------------------------------

public class ABuilder extends Builder{

private Product product;

@Override

protected void diji() {

product.diji();

}

@Override

protected void puzhuan() {

product.puzhuan();

}

@Override

protected void pudianxian() {

product.pudianxian();

}

@Override

protected void youqi() {

product.youqi();

}

protected Product getProduct() {

return product;

}

}

建造者模式和工厂模式的区别

比较两者的客户端,发现两者很像,都是从工厂类(指挥者类)拿产品,然后再使用产品,那么两者有什么区别呢?区别在于内部,建造者注重构建这个对象的过程把控,工厂模式则没有关注这一点,工厂模式中,每个产品的加工流程可以都不相同,而建造者的产品起码要有一部分流程是相似的。我个人是这么理解的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值