构建器模式的真实示例

发布于 2024-10-20 13:24:48 字数 172 浏览 5 评论 0原文

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

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

谢谢。

I would like to see how is Builder pattern used in real world applications/APIs. The examples I found are all pizzas, cakes, cars et cetera (plus the parser example from the GoF book).

Could you please tell me about some usages of this patten in real-world applications/APIs, preferably from the world of C++, .NET or PHP (as those are the languages I'm familiar with).

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

七禾 2024-10-27 13:24:48

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

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

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

Update: I recently came across an even better example (imo). Checkout the JobBuilder and TriggerBuilder implementations in the Quartz scheduler package: http://quartz-scheduler.org/api/2.1.5/

Also, when I have time, just for fun/practice, I try to write examples of all GoF patterns in java. Just recently, I used the Builder pattern to make it easy to generate different types of Sitemaps (google site map vs, html site map, etc). The code is in java, but you might be useful: https://github.com/dparoulek/java-koans/tree/master/src/main/java/com/upgradingdave/koans/builder

Good question, I'd be interested in seeing more modern examples too.

愿得七秒忆 2024-10-27 13:24:48

构建器模式在构建 Json 对象时在 javax.json.Json 和 javax.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();

Builder pattern is used in javax.json.Json and javax.json.JsonBuilder classes while building Json objects.

Good explanation is at http://www.programcreek.com/java-api-examples/index.php?api=javax.json.JsonObjectBuilder and also check out its 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();
悲凉≈ 2024-10-27 13:24:48

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

Actually a very good real-life example is Active Record QueryBuilder example.

You can dig into the Laravel Eloquent module and check those Query builder classes...

A quick example of how it could look:

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
{
    // ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文