经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
建造者模式(Builder Pattern)
来源:cnblogs  作者:街酒  时间:2023/5/10 9:51:56  对本文有异议

模式动机

建造者模式(Builder Pattern)是最复杂的创建型模式,它用于创建一个包含多个组成部分的复杂对象,可以返回一个完整的产品对象给用户。它通过将客户端与包含多个组成部分的复杂对象的创建过程分离,使得客户端无需知道复杂对象的内部组成部分与装配方式,只需要知道建造者的类型即可。它关注如何一步一步创建一个复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,系统具有较好的扩展性。

模式定义

  • 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  • 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。

模式结构

image

模式分析

产品:一个由多种组件组合生成的复杂对象

  1. public class Product {
  2. private String partA; //定义部件,部件可以是任意类型,包括值类型和引用类型
  3. private String partB;
  4. private String partC;
  5. //partA的Getter方法和Setter方法省略
  6. //partB的Getter方法和Setter方法省略
  7. //partC的Getter方法和Setter方法省略
  8. }

抽象建造者

  1. public abstract class Builder {
  2. //创建产品对象
  3. protected Product product=new Product();
  4. public abstract void buildPartA();
  5. public abstract void buildPartB();
  6. public abstract void buildPartC();
  7. //返回产品对象
  8. public Product getResult() {
  9. return product;
  10. }
  11. }

具体建造者

  1. public class ConcreteBuilder1 extends Builder{
  2. public void buildPartA() {
  3. product.setPartA("A1");
  4. }
  5. public void buildPartB() {
  6. product.setPartB("B1");
  7. }
  8. public void buildPartC() {
  9. product.setPartC("C1");
  10. }
  11. }

指挥者

  1. public class Director {
  2. private Builder builder;
  3. public Director(Builder builder) {
  4. this.builder=builder;
  5. }
  6. public void setBuilder(Builder builder) {
  7. this.builder=builer;
  8. }
  9. //产品构建与组装方法
  10. public Product construct() {
  11. builder.buildPartA();
  12. builder.buildPartB();
  13. builder.buildPartC();
  14. return builder.getResult();
  15. }
  16. }

客户

  1. ......
  2. Builder builder = new ConcreteBuilder1(); //可通过配置文件实现
  3. Director director = new Director(builder);
  4. Product product = director.construct();
  5. ......

  • 模式优点

    • 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象
    • 每一个具体建造者都相对独立,与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,扩展方便,符合开闭原则
    • 可以更加精细地控制产品的创建过程
  • 模式缺点

    • 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,不适合使用建造者模式,因此其使用范围受到一定的限制
    • 如果产品的内部变化复杂,可能会需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,增加了系统的理解难度和运行成本
  • 在以下情况下可以使用建造者模式


简化

  • 省略抽象建造者角色-(系统中只需要1个建造者时)
  • 省略指挥者角色-(系统中只需要1个建造者是,省略抽象建造者、还可继续省略指挥者,让Builder角色扮演指挥者与建造者双重角色

原文链接:https://www.cnblogs.com/sorrymine/p/17387103.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号