问题标签 [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 投票
1 回答
1676 浏览

design-patterns - MVC pattern and abstract factory

My main problem is to implement communication with database server which contain info about Employees, Tasks, Projects and Departaments entities. I don't know what entities will be contained in DB in advance (i.e it is possible to add new type of entity (e.g. company) to a DB). Let we're implementing MVC such that we've created the following 3 abstract JAVA classes:

Is it make a sense that we wraped this classes in an abstract factory like this:

0 投票
2 回答
942 浏览

android - 在没有第三方框架的情况下测试 Android 活动时如何注入依赖项?

我想测试一个CommentActivity通常构造和使用实例的 Android 活动CommentsDataSource(两者都是我编写的类)。

我愿意创建MockCommentsDataSource自己,并希望避免使用第三方模拟框架。(为什么?因为我是一名教师,试图减少我需要在学期中填满的信息量以及我的学生需要安装的软件数量。我看过其他推荐 Guice、roboguice 和 Spring 的帖子。)

我的问题是如何将CommentsDataSource(或MockCommentsDataSource)传递给活动。Serializable制作它们或似乎不切实际Parcelable,它们必须是它们才能通过Intentthat 开始传递CommentActivity。虽然我可以轻松地传入调试标志,但使用它需要CommentActivity了解MockCommentsDataSource,这实际上与它无关(并且在单独的应用程序中):

我应该如何MockCommentsDataSource注入CommentActivity?FWIW,我正在使用 Eclipse 并正在为最新的 SDK 版本进行开发。

我想到的一种解决方案是使用抽象工厂模式,因为使工厂可序列化相对容易。考虑到我的限制,这是最好的方法吗?

0 投票
1 回答
1097 浏览

objective-c - 可可中类簇和抽象工厂的区别

我读过Obj-C 类集群抽象工厂的实现。

任何人都可以解释两者之间是否有任何差异作为设计模式。我在某处读到,对不适用于传统抽象工厂的类集群有某些限制,但它没有提供更多细节。

0 投票
1 回答
758 浏览

c# - 尝试实现抽象工厂时未将对象引用设置为对象

我正在 Unity 中开发我的第一款游戏,我正在尝试应用该Abstract Factory模式来创建游戏中的怪物。我有一个所有怪物都应该实现的接口:

我有一个具体的怪物

我想创建一个 Factory 类,它有一个返回新 Monster 对象的方法,这样我以后就可以随机创建具体的 Monster 对象。我写了以下内容:

我正在尝试像这样在我的主要中使用这个工厂:

当我尝试运行游戏时出现以下错误NullReferenceException: Object reference not set to an instance of an object知道我做错了什么吗?

0 投票
1 回答
493 浏览

java - 基于命令行参数创建子类对象的最佳方法

我有几个扩展超类的子类,我想让命令行界面用户选择要使用的子类。所有子类都具有相同的构造函数形式。

例如,我希望能够调用run --subclass=Subclass1,从而调用Subclass obj = new Subclass(arg1, arg2)。我可以想到几种方法来做到这一点,但我认为这种模式经常出现,以至于有一种标准或公认的方法来做到这一点;如果没有,我想做最优雅和最简单的事情。

这是我目前的建议(假设有一个Namespace包含命令行参数的对象):

当子类构造函数都没有参数时,这可以通过不使用 aConstructor和doing来简化return classMap.get(namespace.get("subclass")).newInstance();。请注意,一个缺点是这可能会引发需要在此处或上游处理的几个异常( InstantiationException, IllegalAccessException, NoSuchMethodException, )之一。InvocationTargetException

这合理吗?这是最好的方法吗?有标准模式可以使用吗?

0 投票
1 回答
483 浏览

java - SimpleFactory、FactoryMethod、抽象工厂(实体示例)

我知道这个问题已经被解决了很多次,因此很明显,它并不像人们通常认为的那样微不足道......

为了澄清事情,我想我会使用相同的 bean 系列和相同的概念构建三种不同实现(简单工厂、工厂方法、抽象工厂)的示例,

您如何看待以下示例?你觉得它们清晰正确吗?

对于所有示例,我将使用这个 bean 系列

简易工厂

工厂方法

抽象工厂

对于抽象工厂示例,我添加了这些 bean

这里是抽象工厂的例子

0 投票
1 回答
1403 浏览

android - 如何在不影响生产数据库的情况下测试使用 ContentProvider 的 Activity?

问题

我有两个要测试的 Android 类:

我目前有两个测试课程:

  • CommentContentProviderTest, 它扩展ProviderTestCase2<CommentContentProvider>并使用了MockContentResolver. 这工作正常。
  • CommentActivityTest, 延伸ActivityInstrumentationTestCase2<CommentActivity>. 这工作正常,除了CommentActivity那个 access的部分CommentContentProvider

问题是,当CommentActivity访问时CommentContentProvider,它是通过标准来完成的ContentResolver

因此,当CommentActivityTest运行时,它会启动CommentActivity,它访问(读取和写入)生产数据库,如上两行所示。

我的问题是如何在生产中但在测试期间CommentActivity使用标准。ContentResolverMockContentResolver

相关问题

可能的解决方案

如果我可以通过 start 的 Intent 注入 a (可能是 a 或 )会很好,ContentResolverMockContentResolver不能RenamingDelegatingContext这样做,因为s 不是。CommentActivityContextParcelable

以下哪个选项是最好的,还是有更好的选择?

选项1

将调试标志添加到Intent开始CommentActivity

我不喜欢这个选项,因为我不喜欢将与测试相关的代码放在我的非测试类中。

选项 2

使用抽象工厂模式传递一个Parcelable提供实数ContentProvider或 a 的类MockContentProvider

我也有:

在生产中,我(通过意图)传入一个实例RealContentResolverFactory,在测试中我传入一个实例MockContentResolverFactory。由于两者都没有任何状态,因此它们很容易 Parcelable/Serializable。

我对这种方法的担忧是,我不想成为在存在更简单的方法时过度使用设计模式的“那个人” 。

选项 3

将以下方法添加到CommentActivity

这比选项 1 更干净,因为它将创建的ContentResolver外部CommentActivity放在 .

选项 4

CommentActivityTestextendActivityUnitTestCase<CommentActivity>而不是 ActivityInstrumentationTestCase2<CommentActivity>. 这让我可以CommentActivity通过setActivityContext(). 我传递的上下文覆盖了通常getContentResolver()使用的 a MockContentResolver(我在其他地方初始化)。

这有效,不需要修改被测类,但增加了更多复杂性,因为ActivityUnitTestCase<CommentActivity>.startActivity()不能在setUp() 方法中调用,每个 API

另一个不便之处是必须在触摸模式下测试活动,并且setActivityInitialTouchMode(boolean)定义在ActivityInstrumentationTestCase2<T>但不是ActivityUnitTestCase<T>

FWIW,我对正确处理这一点有点着迷,因为我将在我正在教授的 Android 开发课程中展示它。

0 投票
1 回答
2285 浏览

design-patterns - 抽象工厂与工厂方法:组合与继承?

我已经阅读了很多关于抽象工厂和工厂方法之间差异的帖子,但是有一个我无法理解的问题。

两者之间的一个区别在于,对于抽象工厂模式,一个类通过组合将对象实例化的责任委托给另一个对象,而工厂方法模式使用继承并依赖子类来处理所需的对象实例化

也许我知道为什么抽象工厂模式使用组合和委托来创建对象,但我不明白为什么工厂方法模式使用继承来创建具体的类对象。


这个问题与抽象工厂是什么或工厂方法是什么无关,因此这里没有答案

这是关于为什么当客户端也可以直接调用工厂方法时,工厂方法似乎使用继承。请取消标记为重复。

0 投票
1 回答
78 浏览

c# - 下面的设计是有效的抽象工厂设计吗?

C# 中的代码

  1. 这是一个有效的抽象工厂吗?
  2. 你认为不同的设计模式会比这更好吗?
  3. 为了简单起见,我只添加了三个部分。当我们的其他部分很少时,我们是否应该将“Builder”模式与抽象工厂结合起来构建 Car 对象?
0 投票
2 回答
741 浏览

design-patterns - Abstract Factory & Façade,协同设计模式

在 Façade 模式的文档中,以下语句出现在相关模式的讨论中:

“Abstract Factory 可以与 Façade 一起使用,以提供一个接口,用于以独立于子系统的方式创建子系统对象。”

抽象工厂如何以这种方式与 Façade 一起使用?