我指的是GoF 抽象工厂和Factory方法模式。我理解它们的目的,但困扰我的是,这两种模式都忽略了关于客户机如何获得“工厂对象”实例的讨论。例如,在下面的抽象工厂模式中,讨论假定其他一些框架或驱动程序代码已经构建了层次结构,并且Application实例已经保存了GUIFactory的一个实例( WinFactory或OSXFactory)。
(资料来源:模式)

类似的观点也适用于工厂方法模式。讨论假设外部的其他东西已经实例化了MagicMazeGame。
(资料来源:模式)

为什么要烦我?因为我们需要另一种模式来构造这些对象层次结构,这个模式是许多人在说Factory时实际上所指的模式。基本上,工厂模式如下:
(来源:领域驱动设计,Eric Evans 2003)

在我看来,这是一个不同于抽象工厂或Factory方法的模式。客户端指定需求,工厂根据需求以及配置和上下文创建对象。作为一个假设的例子,客户机指定它需要一个抽象的Connection对象,工厂根据系统中配置的数据库驱动程序创建一个MySQLConnection或OracleConnection。
所以,我的问题是:
GUIFactoryFactory?我知道这个问题只是问如何命名,但是使用一种无处不在的语言(源代码:域驱动设计,Evans 2003 )。在我看来,在软件工程中)也是非常重要的。
发布于 2017-04-19 01:13:32
用于构造对象层次结构的模式称为成分根。此模式适用于任何用于实现接口的具体对象的构造,包括用于实现工厂接口的具体工厂。
复合根通常与依赖项注入一起使用,因此在2009年被问及如何“重构”GoF书时,请注意Erich Gamma GoF添加依赖注入是很有趣的。
Eric Evans的图表似乎是一个体系结构视图,其中使用了术语工厂作为任何工厂模式的占位符。换句话说,它可以表示抽象工厂、工厂方法或GoF之外的其他工厂模式。在架构级别上,特定的工厂模式并不重要,只是客户端将实例化逻辑延迟到其他组件的想法。
https://stackoverflow.com/questions/43480913
复制相似问题