问题标签 [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.
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:
android - 在没有第三方框架的情况下测试 Android 活动时如何注入依赖项?
我想测试一个CommentActivity
通常构造和使用实例的 Android 活动CommentsDataSource
(两者都是我编写的类)。
我愿意创建MockCommentsDataSource
自己,并希望避免使用第三方模拟框架。(为什么?因为我是一名教师,试图减少我需要在学期中填满的信息量以及我的学生需要安装的软件数量。我看过其他推荐 Guice、roboguice 和 Spring 的帖子。)
我的问题是如何将CommentsDataSource
(或MockCommentsDataSource
)传递给活动。Serializable
制作它们或似乎不切实际Parcelable
,它们必须是它们才能通过Intent
that 开始传递CommentActivity
。虽然我可以轻松地传入调试标志,但使用它需要CommentActivity
了解MockCommentsDataSource
,这实际上与它无关(并且在单独的应用程序中):
我应该如何MockCommentsDataSource
注入CommentActivity
?FWIW,我正在使用 Eclipse 并正在为最新的 SDK 版本进行开发。
我想到的一种解决方案是使用抽象工厂模式,因为使工厂可序列化相对容易。考虑到我的限制,这是最好的方法吗?
c# - 尝试实现抽象工厂时未将对象引用设置为对象
我正在 Unity 中开发我的第一款游戏,我正在尝试应用该Abstract Factory
模式来创建游戏中的怪物。我有一个所有怪物都应该实现的接口:
我有一个具体的怪物
我想创建一个 Factory 类,它有一个返回新 Monster 对象的方法,这样我以后就可以随机创建具体的 Monster 对象。我写了以下内容:
我正在尝试像这样在我的主要中使用这个工厂:
当我尝试运行游戏时出现以下错误NullReferenceException: Object reference not set to an instance of an object
知道我做错了什么吗?
java - 基于命令行参数创建子类对象的最佳方法
我有几个扩展超类的子类,我想让命令行界面用户选择要使用的子类。所有子类都具有相同的构造函数形式。
例如,我希望能够调用run --subclass=Subclass1
,从而调用Subclass obj = new Subclass(arg1, arg2)
。我可以想到几种方法来做到这一点,但我认为这种模式经常出现,以至于有一种标准或公认的方法来做到这一点;如果没有,我想做最优雅和最简单的事情。
这是我目前的建议(假设有一个Namespace
包含命令行参数的对象):
当子类构造函数都没有参数时,这可以通过不使用 aConstructor
和doing来简化return classMap.get(namespace.get("subclass")).newInstance();
。请注意,一个缺点是这可能会引发需要在此处或上游处理的几个异常( InstantiationException
, IllegalAccessException
, NoSuchMethodException
, )之一。InvocationTargetException
这合理吗?这是最好的方法吗?有标准模式可以使用吗?
java - SimpleFactory、FactoryMethod、抽象工厂(实体示例)
我知道这个问题已经被解决了很多次,因此很明显,它并不像人们通常认为的那样微不足道......
为了澄清事情,我想我会使用相同的 bean 系列和相同的概念构建三种不同实现(简单工厂、工厂方法、抽象工厂)的示例,
您如何看待以下示例?你觉得它们清晰正确吗?
对于所有示例,我将使用这个 bean 系列
简易工厂
工厂方法
抽象工厂
对于抽象工厂示例,我添加了这些 bean
这里是抽象工厂的例子
android - 如何在不影响生产数据库的情况下测试使用 ContentProvider 的 Activity?
问题
我有两个要测试的 Android 类:
CommentContentProvider
,它扩展ContentProvider
并由SQLiteDatabase支持。CommentActivity
,它通过 a 间接扩展Activity
和访问。CommentContentProvider
ContentResolver
我目前有两个测试课程:
CommentContentProviderTest
, 它扩展ProviderTestCase2<CommentContentProvider>
并使用了MockContentResolver
. 这工作正常。CommentActivityTest
, 延伸ActivityInstrumentationTestCase2<CommentActivity>
. 这工作正常,除了CommentActivity
那个 access的部分CommentContentProvider
。
问题是,当CommentActivity
访问时CommentContentProvider
,它是通过标准来完成的ContentResolver
:
因此,当CommentActivityTest
运行时,它会启动CommentActivity
,它访问(读取和写入)生产数据库,如上两行所示。
我的问题是如何在生产中但在测试期间CommentActivity
使用标准。ContentResolver
MockContentResolver
相关问题
- 这与使用 ContentProviders 的Android 单元测试以及我发现的关于测试 ContentProviders 的其他问题不同,因为这些可以扩展为测试 ContentProviders 而设计的 android.test 类,而我需要扩展一个类来测试
Activity
. - 这类似于在没有第三方框架的情况下测试 Android 活动时如何注入依赖项?,这也是我发布的,但没有得到答复。如果有帮助,我现在愿意使用第三方框架。
- 使用 MockContentResolver 查询导致 NullPointerException相关并导致下面选项 1 中的解决方案,但我不知道它是否是我的最佳解决方案。
可能的解决方案
如果我可以通过 start 的 Intent 注入 a (可能是 a 或 )会很好,但ContentResolver
我MockContentResolver
不能RenamingDelegatingContext
这样做,因为s 不是。CommentActivity
Context
Parcelable
以下哪个选项是最好的,还是有更好的选择?
选项1
将调试标志添加到Intent
开始CommentActivity
:
我不喜欢这个选项,因为我不喜欢将与测试相关的代码放在我的非测试类中。
选项 2
使用抽象工厂模式传递一个Parcelable
提供实数ContentProvider
或 a 的类MockContentProvider
:
我也有:
在生产中,我(通过意图)传入一个实例RealContentResolverFactory
,在测试中我传入一个实例MockContentResolverFactory
。由于两者都没有任何状态,因此它们很容易 Parcelable/Serializable。
我对这种方法的担忧是,我不想成为在存在更简单的方法时过度使用设计模式的“那个人” 。
选项 3
将以下方法添加到CommentActivity
:
这比选项 1 更干净,因为它将创建的ContentResolver
外部CommentActivity
放在 .
选项 4
有CommentActivityTest
extendActivityUnitTestCase<CommentActivity>
而不是 ActivityInstrumentationTestCase2<CommentActivity>
. 这让我可以CommentActivity
通过setActivityContext()
. 我传递的上下文覆盖了通常getContentResolver()
使用的 a MockContentResolver
(我在其他地方初始化)。
这有效,不需要修改被测类,但增加了更多复杂性,因为ActivityUnitTestCase<CommentActivity>.startActivity()
不能在setUp(
) 方法中调用,每个 API。
另一个不便之处是必须在触摸模式下测试活动,并且setActivityInitialTouchMode(boolean)定义在ActivityInstrumentationTestCase2<T>
但不是ActivityUnitTestCase<T>
。
FWIW,我对正确处理这一点有点着迷,因为我将在我正在教授的 Android 开发课程中展示它。
design-patterns - 抽象工厂与工厂方法:组合与继承?
我已经阅读了很多关于抽象工厂和工厂方法之间差异的帖子,但是有一个我无法理解的问题。
两者之间的一个区别在于,对于抽象工厂模式,一个类通过组合将对象实例化的责任委托给另一个对象,而工厂方法模式使用继承并依赖子类来处理所需的对象实例化
也许我知道为什么抽象工厂模式使用组合和委托来创建对象,但我不明白为什么工厂方法模式使用继承来创建具体的类对象。
这个问题与抽象工厂是什么或工厂方法是什么无关,因此这里没有答案
这是关于为什么当客户端也可以直接调用工厂方法时,工厂方法似乎使用继承。请取消标记为重复。
c# - 下面的设计是有效的抽象工厂设计吗?
C# 中的代码
- 这是一个有效的抽象工厂吗?
- 你认为不同的设计模式会比这更好吗?
- 为了简单起见,我只添加了三个部分。当我们的其他部分很少时,我们是否应该将“Builder”模式与抽象工厂结合起来构建 Car 对象?
design-patterns - Abstract Factory & Façade,协同设计模式
在 Façade 模式的文档中,以下语句出现在相关模式的讨论中:
“Abstract Factory 可以与 Façade 一起使用,以提供一个接口,用于以独立于子系统的方式创建子系统对象。”
抽象工厂如何以这种方式与 Façade 一起使用?