设计模式之建造者模式

建造者模式

  • 建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式。

  • 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  • 主要作用:在用户不知道对象建造过程和细节的情况下直接创建复杂的对象。

  • 用户只需要给定出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)

  • 例子:

    • 工厂(建造者模式):负责制造汽车(组装过程和细节在工厂内)
    • 汽车购买者(用户):你只需要说出你需要的型号(对象的类型和内容),然后直接购买就可以使用了(不需要知道汽车是怎么组装的,汽车的车轮,车门等等)
  • 角色分析

    • 构建器:抽象定义了构建产品的步骤,并获取产品对象
    • 具体的构建器:构建器的实现类,可以生产产品
    • 导演:使用构建器构造产品返回

改进

  • 导演类Director在Builder模式中具有很重要的作用,它用于指导具体的构建器如何构建产品,控制调用先后次序,并向调用者返回完整的产品类,但是有些情况下需要简化系统结构,可以把Director和抽象建造者进行结合

  • 通过静态内部类方式实现零件无序装配构造,这种方式使用更加灵活,更符合定义。内部有复杂对象的默认实现,使用时可以根据用户需求自定义更改内容,并且无需改变具体的构造方式。就可以生产出不同复杂产品。

  • 举个非常好的例子,我们去餐厅吃饭,可以通过套餐(导演)点餐,也可以让服务员(具体建造者)随意搭配点餐。与前者相比,少了指挥者,把指挥者交给用户操作,使得产品创建更加的简单灵活。

小结

  • 优点:

    • 产品的建造和表示分离,实现了解耦。使用建造者模式可以使客户端不必知道产品内部组成的细节。
    • 将复杂产品的创建步骤分解在不同方法中,使得创建过程更加清晰。
    • 具体的建造者类之间是相互独立的,这有利于系映的扩展。增加新的具体建造者无需修改原有类库的代码,符合开闭原则。
  • 缺点:

    • 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其是使用范围收到一定的限制。
    • 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
  • 应用场景:

    • 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
    • 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
    • 适合于一个具有较多的零件(属性)的产品(对象)的创建过程。
  • 建造者与抽象工厂模式的比较:

    • 与抽象工厂模式相比,建造者模式返回一个组装好的完整产品,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。
    • 在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,而建造者模式中,客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤,它侧重于一步步构造一个复杂对象,返回一个完整的对象。
    • 如果将抽象工厂模式看成汽车配件生产工厂,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂,通过对部件的组装可以返回一辆完整的汽车。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值