Tag: 工厂方法

devise模式:工厂vs工厂方法与抽象工厂

我正在从网站阅读devise模式 在那里,我读到了工厂,工厂方法和抽象工厂,但他们是如此混乱,不清楚的定义。 根据定义 工厂 – 创build对象而不会将实例化逻辑暴露给客户端,并通过通用接口引用新创build的对象。 是Factory Method的简化版本 工厂方法 – 定义创build对象的接口,但让子类决定实例化哪个类,并通过一个公共接口引用新创build的对象。 抽象工厂 – 提供用于创build相关对象族的界面,而不显式指定其类。 我也看了关于抽象工厂vs工厂方法的其他stackoverflow线程,但绘制在那里的UML图使我的理解更加糟糕。 任何人都可以告诉我 这三种模式如何不同? 什么时候用哪个? 还有,如果可能的话,任何有关这些模式的Java示例?

devise模式:抽象工厂与工厂方法

注意:问题在post末尾。 我已经阅读了关于抽象工厂VS工厂方法的其他stackoverflow线程。 我了解每种模式的意图。 但是,我不清楚这个定义。 Factory Method定义了一个用于创build对象的接口,但是可以让子类决定实例化哪个接口。 工厂方法让类将实例化推迟到子类。 相比之下,抽象工厂提供了一个接口,用于创build相关或依赖对象的族,而不指定具体的类。 – John Feminella 抽象工厂看起来与工厂方法非常相似。 我画了几个UML类来说明我的观点。 注意: 该图来自www.yuml.com,因此它们并不完美。 但是它的免费服务:)。 图表可能不完美。 我仍然在学习GoF的devise模式。 工厂方法: 抽象工厂(只有1个成员): 抽象工厂(更多会员): 问题: 如果抽象工厂只有一个创build者和一个产品,它仍然是抽象工厂模式吗? (创build家庭的界面) 工厂方法的具体创build者可以从一个接口创build吗?还是必须来自一个类? (类将实例化推迟到子类) 如果抽象工厂只能有一个创build者和一个产品,那么抽象工厂和工厂方法之间的唯一区别是,前者的创build者是一个接口,而后者的创build者是一个类?

工厂和抽象工厂模式之间的基本区别是什么?

工厂和抽象工厂模式之间的基本区别是什么?

如何在C ++中正确实现工厂方法模式

C ++中有这样一件事情,使我长时间感到不舒服,因为我真的不知道该怎么做,尽pipe听起来很简单: 如何在C ++中正确实现工厂方法? 目标:使客户可以使用工厂方法而不是对象的构造函数实例化一些对象,而不会造成不可接受的后果和性能问题。 “工厂方法模式”是指对象内部的静态工厂方法或其他类中定义的方法或全局函数。 一般来说,“把X类实例化的正常方式redirect到构造函数以外的任何地方”的概念。 让我浏览一下我想到的一些可能的答案。 0)不要制造工厂,build造者。 这听起来不错(通常是最好的解决scheme),但不是一般的补救措施。 首先,有些情况下,对象build设是一个任务复杂到足以certificate其提取到另一个类。 但是即使把这个事实放在一边,即使对于使用构造函数的简单对象也是不行的。 我所知道的最简单的例子是一个2Dvector类。 这么简单,但棘手。 我希望能够从笛卡儿坐标和极坐标两方面构造它。 显然,我不能这样做: struct Vec2 { Vec2(float x, float y); Vec2(float angle, float magnitude); // not a valid overload! // … }; 那么我自然的思考方式是: struct Vec2 { static Vec2 fromLinear(float x, float y); static Vec2 fromPolar(float angle, float magnitude); // … }; 其中,而不是构造函数,导致我使用静态工厂方法…这基本上意味着我正在实施工厂模式,以某种方式(“class级成为自己的工厂”)。 […]

抽象工厂模式与工厂方法的区别

我知道这里有很多关于这两种模式差异的post,但是有一些我找不到的东西。 从我一直在阅读的文章中,我发现工厂方法模式允许你定义如何创build一个具体的产品,但隐藏客户端的实现,因为他们会看到一个通用的产品。 我的第一个问题是关于抽象工厂。 它的作用是允许你创build具体对象的家族(这取决于你使用的具体工厂)而不是仅仅一个具体的对象? 抽象工厂是否只返回一个非常大的对象或许多对象,取决于你调用的方法? 我最后的两个问题是关于我在许多地方看到的一句话,我不能完全理解: 两者之间的一个区别是,使用抽象工厂模式,类将委托对象实例化的责任通过组合而另一个对象,而工厂方法模式使用inheritance,并依赖于一个子类来处理所需的对象实例化。 我的理解是,工厂方法模式有一个Creator接口,这将使ConcreteCreator负责知道哪个ConcreteProduct实例化。 这是通过使用inheritance来处理对象实例吗? 现在关于这个引用,Abstract Factory模式究竟是如何将对象实例化的责任委托给另一个对象的? 这是什么意思? 看起来抽象工厂模式也使用inheritance来完成build造过程,但我仍然在学习这些模式。 任何帮助,尤其是最后一个问题,将不胜感激。

什么是静态工厂方法?

什么是“静态工厂”方法?