生成器模式的现实世界示例

17

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

请告诉我一些这个模式在真实世界应用/API中的用途,最好来自C ++、.NET或PHP领域(因为这些是我熟悉的语言)。

谢谢。


相关问题:https://dev59.com/nXRC5IYBdhLWcg3wVvjL - Yanick Rochon
3个回答

9
更新:最近我发现了一个更好的例子(在我看来)。请查看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 - 请查看此帖子,并了解为什么它不好。今天我也学到了一些东西 - Builder模式的不可变性方面! - Zeena

4

建造者模式被用于构建Json对象时的javax.json.Jsonjavax.json.JsonBuilder类中。

良好的解释在http://www.programcreek.com/java-api-examples/index.php?api=javax.json.JsonObjectBuilder,也可以查看其官方文档

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
{
    // ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接