建造者设计模式(角色分析)

使用简单的对象一步一步构建成一个复杂的对象。

概念:

  1. 定义:讲一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  2. 主要作用:在用户不知道 对象的建造过程和细节 的情况下就可以直接创建复杂的对象
  3. 如何使用:用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建负责对象(把内部的建造过程和细节隐藏起来)
  4. 解决的问题:①方便用户创建负责的对象(不需要知道实现过程)
    ②代码复用性\封装性(将对象那个构建过程和细节进行封装和复用)
    注意事项:与工厂模式的区别是:建造者模式更加关注零件的装配顺序,一般用来创建更为复杂的对象。

角色分析:

①指挥者(Director)直接和用户(Client)进行需求沟通;
②沟通后指挥者将客户创建产品的需求划分为各个部件的建造请求(Builder);
③将各个部件的建造请求委派到具体的建造者(ConcreteBuilder);
④各个具体建造者负责进行产品部件的构建;
⑤最终构建成具体产品(Product)

实现方式:

方式一:

通过Client,Director,Builder,Produce形成的建造者模式

角色分析:
  1. 抽象建造者(builder):描述具体建造者的公共接口,一般用来建造细节的方法,并不涉及具体的对象部件的方法。
  2. 具体建造者(ConcereteBuilder):描述具体建造者,并实现抽象建造者公共接口。
  3. 指挥者(Director):调用具体建造者来创建复杂对象(产品)的各个部分,并按照一定顺序(流程)来建造复杂对象。
  4. 产品(Product):描述一个由一些列组件组成较为复杂的对象。

方式二:

通过静态内部类方式实现零件无序装配化构造,该方式使用起来更加灵活,使用时可以根据用户的需求自定义更改内容,并且无需改变具体的构造方式,可以生产出不同的产品。

角色分析:
  1. 抽象建造者
  2. 具体建造者
  3. 产品
    比第一种方式少了指挥者,主要是因为第二种方式把指挥者交给用户来操作,使得产品的创建更加灵活。

总结:

优点:

  1. 产品的建造与表示分离,实现了解耦,使用建造者模式可以使客户端不必知道产品内部的组成细节。
  2. 将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰。
  3. 具体的建造者类之间是相互独立的,这有利于系统的扩展。也就是说,增加新的具体建造者无需修改原有类库的代码,符合开闭原则。
  4. 具体的建造者相互独立,因此可以对建造的过程逐步细化,而不会对其他模块产生任何影响。

缺点:

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

应用场景:

  1. 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性。
  2. 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
  3. 需要生成的对象内部属性本身相互依赖。
  4. 适合于一个具有较多的零件(属性)的产品(对象)的创建过程。

建造者与抽象工厂模式的比较:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值