问题标签 [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.
php - 如何在 PHP 中创建派生类对象作为基类对象
我在 php 中实现工厂模式。有一个 AbstractFactory 类,一个是 ConcreteFactory 类。以下是我正在使用的代码:
(AbstractFactory $afobject )
返回解析错误。
谁能告诉我如何创建这个对象?
java - Java 在运行时使用参数实例化类
我正在使用抽象工厂来返回具体子类的实例。我想在运行时实例化子类,给定具体类名的字符串。我还需要将参数传递给构造函数。类结构如下:
我上面的 attmept 抛出了以下异常:java.lang.NoSuchMethodException: Child.<init>()
,然后是堆栈跟踪。
任何帮助表示赞赏。谢谢!
java - 在抽象工厂中插入数据库访问依赖关系好吗?
我有一个抽象工厂类 StudentValidatorFactory,它应该创建(基于指定的参数)必须注入验证映射的各种 StudentValidator 类实例(参见下面的代码)。
我的问题是关于StudentValidatorFactory.createStudentValidator(int studentType)方法是否应该在 create 方法中从持久存储(基于学生类型)读取验证图?否则,工厂是否应该了解/依赖此类实施细节?
如果在创建学生验证器时有一个避免 switch(studentType) 语句的解决方案,我将不胜感激 - 我的想法是拥有一个内部管理的映射并通过反射执行 StudentValidator 具体类实例化。
使用这种技术的优点是验证器更容易测试(通过依赖注入)。
c++ - 如何优雅地处理抽象工厂和数组作为 C++ 中的返回类型?
考虑到抽象工厂模式,假设您有一个类层次结构,其中具体工厂覆盖 createButton* s * 虚拟方法,需要返回更广泛的按钮数组。由于 C++ 仅支持协变返回类型,有什么优雅的解决方法可以解决这个问题?动态转换?
GoF 示例的修改版本以满足我的要求:
和应用程序骨架:
php - 抽象工厂是否使用“新”?
我正在尝试尽可能多地使用依赖注入,但是在涉及短期依赖等问题时我遇到了麻烦。
例如,假设我有一个博客管理器对象,它想要生成它在数据库中找到的博客列表。执行此操作的选项(据我所知)是:
- 新博客();
- $this->loader->blog();
- loader 对象创建各种其他类型的对象,如数据库对象、文本过滤器等。
- $this->blogEntryFactory->create();
但是,#1 不好,因为它会产生强耦合。#2 看起来仍然很糟糕,因为这意味着必须事先注入对象工厂——暴露它可以创建的所有其他对象。
数字 3 看起来不错,但如果我使用 #3,我是否将“新”关键字放入 blogEntryFactory 本身,或者,我是否将加载器注入 blogEntryFactory 并使用加载器?
如果我有许多不同的工厂,比如 blogEntryFactory(例如,我可以有 userFactory 和 commentFactory),那么在所有这些不同的工厂中放置“new”关键字似乎会产生依赖性问题。
我希望这是有道理的...
笔记
对于这个特定的博客示例,我已经得到了一些关于这如何不必要的答案,但事实上,在某些情况下你应该使用抽象工厂模式,这就是我要表达的观点。在这种情况下,您使用“新”,还是做其他事情?
c# - 单元测试一个接受参数的抽象工厂
给定一个抽象工厂实现:
将为这个类编写哪些单元测试?如何验证 param1 和 param2 是否已转发到 Foo 的创建?我必须制作 Foo 的这些公共属性吗?那不会破坏封装吗?还是我应该把它留给集成测试?
java - Java泛型抽象工厂问题
我正在努力完成这项工作:
问题是编译错误:
类型不匹配:无法从 MapperFactory.MyTaskMapperFactory 转换为 MapperFactory
在我的 MapperFactory 中:
任何想法如何解决这个错误?
当然更换:
和:
会工作,但这不是我正在寻找的答案。
一般来说,这似乎是通用抽象工厂模式的问题。也欢迎提供使用定制对象的源样本的答案。
php - 允许在 PHP 中使用抽象工厂模式进行自定义类实例化
目前,我使用抽象工厂来允许指定自定义类名来生成请求对象。我这样做的原因是让我可以在不更改代码的情况下轻松扩展核心功能。不过,最近,我对这种方法的有效性有些怀疑。所以我的问题是:
允许工厂实例化与预期接口匹配的任何提交的类名是工厂概念的混蛋吗?我会更好地避免这种情况吗?
更新
这里的逻辑是这样的:一方面,现实生活中的汽车工厂(例如)如果没有配备制造这种汽车的机器,就无法制造汽车。另一方面,下面的代码就像给同一家汽车工厂提供蓝图来制造它原本不打算制造的定制汽车。
另一种方法是传入一个配置对象,指定可以与工厂一起使用的自定义类名,并限制工厂仅在它与配置指定的自定义类名特别匹配时才生成自定义类。有什么想法吗?
以及相关代码...
design-patterns - DAO/抽象工厂模式 - 多数据源
我目前使用抽象工厂模式设置了一些 DAO。它看起来像这样:
静态GetDaoFactory()
返回底层证券SqlDaoFactory
。直到今天,所有的 Daos 都使用同一个 SQL 数据库。现在,我想向这个工厂添加另一个 DAO,但是 DAO 将与外部服务而不是 SQL 数据库交互(假设这是GetCompanyDao()
)。我基本上只想将此GetCompanyDao()
方法添加到抽象DaoFactory
类中,以便公共接口与底层实现完全解耦(无需/方式来判断特定 dao 是使用 SQL 还是外部服务)。
我是否应该简单地将其重命名SqlDaoFactory
为更合适的名称并在其中包含该GetCompanyDao()
方法,以便这个 DAO Facotry 现在对某些 DAO 使用 SQL,而对另一个使用外部服务?还是有不同的方法来实现这一点?
c# - 静态提供者字典设计
我正在重新考虑我们现在正在使用的当前 WCF 服务。我们做了很多将 XML 加载到各种数据库的工作。在某些情况下,我们可以将其存储为 XML 数据,而在其他情况下,我们需要将其存储为行集。
所以我正在重新设计这项服务以接受不同的提供商。我的第一个想法是经典的抽象工厂,但现在我有疑问了。本质上,服务类有一个操作契约方法,Load。但对我来说,每次调用 Load 时新的提供程序实例似乎很愚蠢。
目前:
我正在考虑更改为:
这是一个好方法吗?我喜欢缓存提供程序的想法,对我来说似乎更有效......虽然,我有时会忽略显而易见的事情。让我知道你的想法!