Builder模式的真实示例

时间:2011-03-06 14:26:03

标签: design-patterns builder

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

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

感谢。

3 个答案:

答案 0 :(得分:9)

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

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

好问题,我也有兴趣看到更多现代的例子。

答案 1 :(得分:5)

构建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();

答案 2 :(得分:1)

实际上,一个非常好的真实示例是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
{
    // ...
}