首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Builder设计模式和Factory设计模式有什么不同?

Builder设计模式和Factory设计模式有什么不同?
EN

Stack Overflow用户
提问于 2009-04-16 11:39:05
回答 26查看 320.8K关注 0票数 777

Builder设计模式和Factory设计模式有什么不同?

哪一个更有优势?为什么?

如果我想测试和比较/对比这些模式,我如何将我的发现表示为图形?

EN

回答 26

Stack Overflow用户

回答已采纳

发布于 2009-04-16 11:46:53

对于设计模式,通常没有适用于所有情况的“更有利”的解决方案。这取决于您需要实现什么。

来自维基百科:

  • 生成器专注于一步一步地构造复杂对象。抽象工厂强调一系列产品对象(简单的或复杂的)。Builder返回产品作为最后一步,但就抽象工厂而言,产品返回immediately.
  • Builder通常构建Composite.
  • Often,设计开始使用工厂方法(不太复杂,更可定制,子类激增),并发展到抽象工厂,原型,或生成器(更灵活,更复杂),当设计师发现更多的灵活性是needed.
  • Sometimes创建模式的补充:生成器可以使用其他模式之一来实现要构建的组件。抽象工厂、生成器和原型可以在其implementations.

中使用单例

工厂设计模式的维基百科词条:http://en.wikipedia.org/wiki/Factory_method_pattern

构建器设计模式的维基百科条目:http://en.wikipedia.org/wiki/Builder_pattern

票数 540
EN

Stack Overflow用户

发布于 2012-01-22 05:15:43

工厂只是一个围绕构造函数的包装函数(可能在不同的类中)。关键区别在于,工厂方法模式要求在单个方法调用中构建整个对象,所有参数都在一行中传递。将返回最终的对象。

另一方面,构建器模式本质上是一个包装对象,它包含了您可能想要传递到构造函数调用中的所有可能的参数。这允许您使用setter方法来慢慢构建参数列表。构建器类上的另一个方法是build()方法,它只是将构建器对象传递给所需的构造函数,并返回结果。

在像Java这样的静态语言中,当您有大量(可能是可选的)参数时,这就变得更加重要,因为它避免了对所有可能的参数组合使用伸缩构造函数的要求。此外,构建器还允许您使用setter方法来定义只读或私有字段,这些字段在调用构造函数后不能直接修改。

Basic工厂示例

代码语言:javascript
运行
AI代码解释
复制
// Factory
static class FruitFactory {
    static Fruit create(name, color, firmness) {
        // Additional logic
        return new Fruit(name, color, firmness);
    }
}

// Usage
Fruit fruit = FruitFactory.create("apple", "red", "crunchy");

Basic生成器示例

代码语言:javascript
运行
AI代码解释
复制
// Builder
class FruitBuilder {
    String name, color, firmness;
    FruitBuilder setName(name)         { this.name     = name;     return this; }
    FruitBuilder setColor(color)       { this.color    = color;    return this; }
    FruitBuilder setFirmness(firmness) { this.firmness = firmness; return this; }
    Fruit build() {
        return new Fruit(this); // Pass in the builder
    }
}

// Usage
Fruit fruit = new FruitBuilder()
        .setName("apple")
        .setColor("red")
        .setFirmness("crunchy")
        .build();

比较这两个维基百科页面中的代码样本可能是值得的:

http://en.wikipedia.org/wiki/Factory_method_pattern

http://en.wikipedia.org/wiki/Builder_pattern

票数 440
EN

Stack Overflow用户

发布于 2009-04-16 11:44:50

工厂模式几乎可以看作是Builder模式的简化版本。

工厂模式中,工厂负责根据需要创建对象的各种子类型。

工厂方法的用户不需要知道该对象的确切的子类型。工厂方法createCar的一个示例可能返回FordHonda类型的对象。

构建器模式中,不同的子类型也是由构建器方法创建的,但是在同一子类中对象的组成可能不同。

要继续汽车示例,可以使用createCar构建器方法创建具有4个气缸的引擎的Honda-typed对象,或创建具有6个气缸的Honda-typed对象。构建器模式允许这种更精细的粒度。

维基百科上提供了Builder patternFactory method pattern的图表。

票数 305
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/757743

复制
相关文章
python google app engine
云计算的三个层次:issa:paas:saas 云计算有三个层次。图12-1 显示了每个层次,以及对应层次的代表产品。最低层的是IaaS(Infrastructure-as-a-Service),即提供计算机本身基本的计算能力(物理形式或虚拟形式)、存储(通常是磁盘)、计算。亚马逊Web 服务(Amazon Web Services,AWS)提供了弹性计算云(Elastic Compute Cloud,EC2),以及简单存储系统(Simple Storage System,S3)服务,这两者就在IaaS 层面。Google 也提供了IaaS 存储服务,称为Google Cloud Storage。Google App Engine 作为云计算的中间一层,称为Paas(Platform-as-a-Service)。这一层为用户的应用提供执行平台。最高一层是Software-as-a-Service(SaaS)。在这一层,用户只须简单地访问应用,这些应用位于本地,但只能通过因特网访问。SaaS 的例子包括基于Web的电子邮件服务,如Gmail、Yahoo! Mail 和Hotmail。
用户5760343
2022/05/14
5470
python google app engine
折腾Google App Engine:上传应用
作者:matrix 被围观: 2,015 次 发布时间:2013-07-26 分类:兼容并蓄 零零星星 | 无评论 »
HHTjim 部落格
2022/09/26
1K0
折腾Google App Engine:上传应用
为MyEclipse安装google app engine插件
我的淘宝客网站准备先放到google app engine上,所以需要为MyEclipse安装google app engine的插件。
明年我18
2019/09/18
7960
为MyEclipse安装google app engine插件
Google Adsense 整合了 Google Analytics
根据 Google AdSense 官方博客最新发布的日志,Google AdSense 将整合 Google Analytics。Google 将逐渐给 Google AdSense 发布商提供邀请使用该功能,如果你的账号启用该功能的时候,就可以在 Google AdSense 的 'Overview' 和 'Advanced Reports' 页面的上方看到一个邀请链接。
Denis
2023/04/14
6300
Google Adsense 整合了 Google Analytics
DevOps工具介绍连载(20)——Google App Engine
2008年4月7号,Google在Campfire One上介绍了一种简化创建、运行和构建伸缩性Web应用的工具——Google App Engine。简而言之,Google App Engine允许你本地使用Google基础设施构建Web应用,待其完工之后再将其部署到Google基础设施之上。
顾翔
2020/03/12
2.8K0
基于Google App Engine 的Adsense投放监控系统
         题外话,如果让我选择我最讨厌的一种计算机程序语言,排名第一的是Python。原因只有一个,这种靠缩进来区分块block的语法格式太折磨人了。所以2年前决定学动态语言的时候,我选择了Ruby,当然还有Rails。         但是Google App Engine选择了Python ,没办法,我只好将就这用用了。         言归正传。 google Adsense 是Google的聚宝盆,同时也是很多站长、博客的摇钱树。Google、广告商、广告发布商是一个链条上的利益共同体。在这个链条上Google是掌握 着所有的流量流向、资金流向,正是因为GOOGlE信奉不作恶的理念才让这个链条上的各方安分守己做好自己的事情。         然而追求利益最大化是每个人、每个公司的天性。广告商想用最低的价格发布广告,所以网络上有了Google Adsense 低价网站黑名单;广告发布商想提高自己的收入,所以Google要封杀欺诈点击。         那么,基于Google App Engine 的Adsense投放监控系统能做什么呢?         这个工具是我用一个周末的时间完成的,我也信奉不作恶的原则,因此这个工具只有2个功能:         1、作为广告发布商,告诉你发布了谁的广告。         2、作为广告商、告诉你谁发布了你的广告。      如果你是一位站长、如果你是一名博客写手并且你使用了Google Adsense广告。      那么我强烈推荐您使用:基于Google App Engine 的Adsense投放监控系统 http://20081949.appspot.com/      使用Google App Engine的服务,因此你需要一个Google帐号才能使用这项服务。
田春峰-JCJC错别字检测
2019/02/14
9790
Google Earth Engine使用
谷歌的地理引擎,通过一些简单的API我们就可以在几十PB大小的数据内进行弹性运算,以获得我们需要的结果。我们每个人都有权利平等的来享受这个美好的世界。
云深无际
2021/10/20
1.4K0
Google Earth Engine使用
Google Earth Engine(趋势分析)
之前有小伙伴想让做一期利用GEE做植被指数变化的文章,可惜一直没什么时间去做。今天小编终于把这个给做好了。
气象学家
2020/06/29
3.1K0
Google Earth Engine(趋势分析)
面向网站的Google Analytics
Google Analytics 提供与您网站的访问者流量和营销情况相关的详细统计信息,让您更好地了解您的受众群体。对于任何有志于增加访问者群体的网站所有者来说,它都是有益处的。
PantaZheng
2018/09/13
2.7K0
面向网站的Google Analytics
Google Earth Engine(区域统计)
在通过GEE计算遥感的地表参量以后,我们就需要对计算出来的数据进行统计。GEE上面画图的功能并不是很齐全,得到的效果也不尽如人意。因此我们就需要将GEE对区域的统计量进行导出,导入到本地以后,再进行绘图。
GIS与遥感开发平台
2022/04/29
1.4K0
Google Earth Engine(区域统计)
Google Earth Engine(监督分类)
本次我们讲一下如何利用GEE做监督分类。训练器我们选择随机森林,数据选择Landsat-8,我们只使用其中的2-7波段。
GIS与遥感开发平台
2022/04/29
1K0
Google Earth Engine(监督分类)
Google Earth Engine(趋势分析)
之前有小伙伴想让做一期利用GEE做植被指数变化的文章,可惜一直没什么时间去做。今天小编终于把这个给做好了。
GIS与遥感开发平台
2022/04/29
1.1K0
Google Earth Engine(趋势分析)
用Google Analytics分析WordPress
Google Analytics(分析)提供与您网站的访问者流量和销售相关的详细统计信息,让您更好地了解您的受众群体。对任何有兴趣增加访客群的网站所有者都有好处。
Techeek
2018/09/19
4.6K0
用Google Analytics分析WordPress
点击加载更多

相似问题

运行web应用5天后性能下降,如何发现瓶颈?

81

迭代多个列表(性能没有下降)

13

PostgreSQL索引表性能突然下降

10

PostgreSQL自真空导致性能显著下降

14

Tensordot的性能瓶颈

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档