【问题标题】:Real-world examples of the Builder patternBuilder 模式的真实示例
【发布时间】:2022-03-13 09:45:52
【问题描述】:

我想看看在现实世界的应用程序/API 中如何使用 Builder 模式。我找到的例子都是比萨饼、蛋糕、汽车等等(加上 GoF 书中的解析器示例)。

您能否告诉我此模式在实际应用程序/API 中的一些用法,最好来自 C++、.NET 或 PHP(因为这些是我熟悉的语言)世界。

谢谢。

【问题讨论】:

标签: design-patterns builder


【解决方案1】:

更新:我最近遇到了一个更好的例子(imo)。查看 Quartz 调度程序包中的 JobBuilder 和 TriggerBuilder 实现:http://quartz-scheduler.org/api/2.1.5/

另外,当我有时间时,只是为了好玩/练习,我会尝试用 Java 编写所有 GoF 模式的示例。就在最近,我使用 Builder 模式来轻松生成不同类型的站点地图(google 站点地图与 html 站点地图等)。代码在 java 中,但您可能有用:https://github.com/dparoulek/java-koans/tree/master/src/main/java/com/upgradingdave/koans/builder

问得好,我也有兴趣看到更多现代示例。

【讨论】:

  • @Dave Paroulek - 检查此post 并解释为什么它不好。分享一下我今天也学到的东西——Builder模式的不变性!
【解决方案2】:

构建 Json 对象时,javax.json.Jsonjavax.json.JsonBuilder 类中使用了构建器模式。

http://www.programcreek.com/java-api-examples/index.php?api=javax.json.JsonObjectBuilder 有很好的解释,也可以查看它的official documentation

JsonObjectBuilder b = Json.createObjectBuilder().
            add( "report", Json.createObjectBuilder().
                 add( "reportId", reportId ).
                 add( "title", title ).
                 add( "subtitle", subTitle == null ? "" : subTitle ).
                 add( "created", created.toString() ).
                 add( "description", description == null ? "" : description ).
                 add( "data", report )
            );
return b.build();

【讨论】:

    【解决方案3】:

    实际上一个非常好的现实生活示例是 Active Record QueryBuilder 示例。

    您可以深入了解 Laravel Eloquent 模块并检查那些查询构建器类...

    外观的简单示例:

    interface SqlQueryBuilder
    {
        public function select(string $table, array $fields): SqlQueryBuilder;
    
        public function where(string $field, string $value, string $operator = '='): SqlQueryBuilder;
    
        public function limit(int $start, int $offset): SqlQueryBuilder;
    
        // ... other methods
    
        public function getSQL(): string;
    }
    
    class MysqlQueryBuilder implements SqlQueryBuilder
    {
        // ...
    }
    
    class PostgresQueryBuilder extends MysqlQueryBuilder
    {
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-24
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      相关资源
      最近更新 更多