问题标签 [abstract-factory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1917 浏览

java - Java 中的抽象工厂 - 如何扩展?

我使用 java 库,core负责AbstractFactoryUI 组件。MyApplication 使用核心并自定义 UI。因此,在 MyApplication 启动期间,我将 MyFactory 设置为 AbstractFactory 的一个实例。

我的问题是,我需要在 MyApplication 中创建例如 JList,但我无法public JList createJList()在 AbstractFactory 中添加,因为我无法修改核心库。

我该怎么办?

案例一: 总是MyFactory.getMyFactoryInstance()在 MyApplication 中调用,新的静态字段。

案例二: 总是MyFactory.getMyFactoryInstance()在 MyApplication 中调用,使用 cast

案例三: 使用两个工厂。对于 JButton 和 JLabels,使用 AbstractFactory,对于 JList,使用 SomeOtherFactory。

案例四:更好的东西?我觉得我忽略了一些东西。

0 投票
5 回答
6674 浏览

java - Java 接口、创建者模式和“getInstance()”方法或等效方法

我想首先提到我的问题源于 Java 中的接口不允许静态方法这一事实。已经在 SO 上讨论了这个原因(例如, here)。因此,让我们不再赘述。我正在为我的接口寻找一种方法来创建它自己的实例(而不是它的实现)并返回它。尽管使用了 Singleton 模式、Factory 和 AbstractFactory 模式,我仍然无法实现我的目标。

详细说明我正在尝试的内容 - 这是我的界面:

这是我的业务逻辑层:

我尝试使用这样的工厂模式:

但是,这仍然需要业务逻辑层知道实现类NoteDataStoreFactoryImpl,因此:

我该如何解决这个问题?如何让我的 BusinessLogicLayer 对要使用的确切实现类一无所知?


编辑:我的问题的更详细背景

一些答案建议使用像 Spring 这样的框架。唉,我不能这样做,因为这个应用程序针对各种移动平台(Android、Blackberry、JavaME)。我应该在我最初的问题中明确说明这一点 - 很抱歉没有这样做。

我的主要目的是拥有一个跨平台的应用程序。UI、数据库访问、HTTP 传输层等必须专门针对每个平台进行编码。但是,业务逻辑足够简单,可以保证跨所有平台的通用层。我打算将业务逻辑层分发为 JAR 库。解析和框架层(用于 JSON/XML)也是如此。

在 SO 已经讨论过这个问题(关于我是否应该走这条路)——逻辑代码重用。但是,假设这没问题,并且我继续使用分层方法并打算在代码中使用一个通用层。现在,我的情况是这样的:

  1. 一个通用的业务逻辑层。
  2. 平台特定的数据层(由NoteDataStore接口表示)
  3. 特定于平台的应用程序核心层(控制器,如果我可以这样称呼它)。

请注意,如果我使用工厂模式或其他类似模式,我可以负担得起每个平台特定的层。所以,工厂方法/类本身可以知道NoteDataStore实现类。但是,业务逻辑层必须不知道任何实现类。

各种层的典型用法如下:

关于如何处理这种情况的任何意见?

0 投票
5 回答
661 浏览

java - 设计模式需要去掉对象初始化中的一系列If..else

我正在编写一个应用程序,其中将有多个部门,每个部门都有单独的处理类。每个部门和部门处理由单独的类表示。

所以,现在java中的main方法看起来更像是一系列if else阶梯。

有什么办法让它更灵活,这样我以后就可以添加更多的部门和他们的处理类,而不需要对原来写的类做太多修改??

我读过抽象工厂模式,但除了它还有其他解决方案吗?

0 投票
1 回答
823 浏览

objective-c - Objective-C 类簇和私有类初始化器

通常,作为一个优秀的 Cocoa 公民,我编写了返回类型id(即指向泛型对象的指针)的初始化程序,以便以后进行子类化(尽管 99% 的时间我不需要它)。

现在我正在创建自己的类集群(许多私有类都以单个公共类为上限)。问题:我是否还需要将私有类的初始化程序定义为返回通用id指针:

或指向私有类本身的指针,例如:

0 投票
4 回答
1551 浏览

java - Java 泛型和设计模式:不对泛型类型的引用进行参数化总是一件坏事?

这个问题与我的上一个问题部分相关。

我有一个代表通用对象集合的通用类:

在我的设计中,这些对象集合是由客户端类(我们称之为 CollectionBuilder)通过抽象类方法构建的:

应以这种方式构造通用集合:

好的。既然这里一切都好。CollectionBuilder 知道要指定的通用具体类型是什么(在这种情况下为 Double),并且可以正确构建。我可以在没有警告的情况下编译它,并且一切都应该正常工作。

现在我有一个与泛型和我的程序设计有关的问题。

我的应用程序中有另一个类需要使用由 CollectionBuilder 构建的集合(我们称这个类为 UserClass)。用户类:

  1. 不需要知道哪个特定的具体类型是它的集合(MyCollection<MyObject<Double>>MyCollection<MyObject<Integer>>)。
  2. 对这些集合执行一些操作,调用 MyCollection 接口中定义的一些方法。
  3. 我不想向它添加泛型类型。

在所描述的情况下,不参数化泛型类 MyCollection insied UserClass 是不是一个坏主意?

如果我没有指定泛型参数,Java 编译器总是会发出警告。无论如何,从 UserClass 内部我不知道具体参数(我想不知道),甚至用“?”声明它。不允许我在 MyCollection 上调用方法 foo。

所以问题是:

  1. 不参数化对泛型类型的引用总是一件坏事?
  2. 如果 1 的答案是否定的,这是不这样做的正确情况吗?
  3. 如果 1 的答案是肯定的,我如何在 UserClass 内部使用 MyCollection 方法而不知道它们的泛型类型?
  4. 我的设计不好吗?

我希望已经清楚了。几天来我一直在努力解决这个问题,我不知道。请帮我。

0 投票
3 回答
786 浏览

java - 依赖注入与工厂设计模式的主要区别是什么?

您能否简要解释一下:依赖注入与工厂设计模式的主要区别是什么?

另外:是否可以通过代码示例非常简单地演示差异?

谢谢

0 投票
1 回答
3735 浏览

design-patterns - 在单元测试中使用工厂/抽象工厂设计模式

有人告诉我,用于编写单元测试用例的工厂/抽象工厂设计模式非常有效,但我还没有找到任何可以清楚地展示它的教程。因此,如果有人可以向我指出任何现有的教程或在这里给我一些伪代码和解释,那将非常有帮助:)

0 投票
4 回答
5644 浏览

java - Java中具有泛型类型的AbstractFactory:一个设计问题

根据抽象工厂模式,我有以下 2 个接口:

我有一个实现 GenericObject 的抽象类,但它仍然不知道具体类型(它只对 Number 进行泛型操作):

然后我有一系列执行通用参数替换的具体类扩展:

现在,我从工厂的实现内部构建了具体类型,它正在实现 GenericObjectInterface 但丢失了它的泛型参数:

我想返回实现 GenericObjectInterface 的 obj 但我不知道该怎么做。我该如何解决这个问题?

我习惯于抽象工厂,但我从未将它与泛型一起使用。我在解释模式时是否犯了一些错误?

0 投票
2 回答
887 浏览

oop - 如何从工厂模式返回的对象中设置不同的属性?

我想知道如何设置具体工厂返回的对象的属性。工厂可以返回带有属性 A 和 B 的 objectA,但它也可以返回带有属性 X、Y、Z 的 objectB。

由于客户端只知道objectA和objectB继承的接口,它不知道他在处理哪个对象。所以,我的问题是,设置这些属性的 OO 方式是什么?我需要引入一种设置类,它包含classA和classB的所有属性吗?但这不是 OO,因为当有一个新类时,我也必须更新设置类......

我希望你能理解我的问题并能帮助我:)

PS:如果重要的话,我正在使用 C#

0 投票
3 回答
5151 浏览

java - AbstractFactory 与桥接模式

我刚刚了解了BridgePattern 及其意图:将抽象与其实现分离,以便两者可以独立变化

但是为什么不能AbstractFactory做同样的事情呢?

我知道 anAbstractFactory可以创建一个特定的桥梁,但我的问题涉及使用AbstractFactoryBridge解耦抽象和实现。

你能解释一下AbstractFactoryBridgePattern之间的真正区别吗?