Questions tagged «factory»

9
为什么要使用工厂类而不是直接对象构造?
我已经在GitHub和CodePlex上看到了几个С#和Java类库项目的历史,并且看到了切换到工厂类而不是直接对象实例化的趋势。 为什么要广泛使用工厂类?我有一个很好的库,通过老式的方式创建对象-通过调用类的公共构造函数。在最后的提交中,作者迅速将所有数千个类的公共构造函数更改为内部构造,并且还创建了一个具有数千个CreateXXX静态方法的巨大工厂类,这些静态方法通过调用类的内部构造函数来返回新对象。外部项目API损坏了,做得很好。 为什么这样的更改有用?用这种方式重构的目的是什么?用静态工厂方法调用替换对公共类构造函数的调用有什么好处? 什么时候应该使用公共构造函数,什么时候应该使用工厂?


3
DI / IoC容器与工厂:我在哪里配置应用程序,为什么?
我试图弄清楚何时使用DIC / IoC注册表来配置我的软件以及何时使用工厂,以及这两种方法背后的原因。 我正在使用StructureMap作为我的DI容器(DIC),使用注册表很容易配置它。在DIC中,从某种意义上说,实际上所有注册的对象都是静态的,一旦配置了DIC并且在DIC中将它们配置为单例,就不需要在运行时更改/交换任何实现/实例。但是,由于我的软件(SW)将在不同的设备上运行,因此我确实需要根据运行我的SW的设备选择特定于设备的注册表,以便相应地配置硬件。 由于某些对象的构造需要读取配置文件,因此我正在使用工厂将这些实例返回给DIC,以便将配置的读取与对象的创建分开。我在DIC中为相应的插件类型注册了工厂吸气剂。 现在说我有一个插件类型IMotor与具体类型Motor1和Motor2,这应该由厂家来处理。现在,有两种方法可以决定如何配置设备: 我将有关运行SW的设备的信息传递给,MotorFactory并且它返回正确的电动机,Motor1或者Motor2。在这种情况下,决定的逻辑是在工厂内部。 我根据运行它,并创建两个工厂的设备配置DIC Motor1Factory和Motor2Factory,其中一个创建Motor1和其他 Motor2。在这种情况下,对于IMotor使用Motor1Factory或的设备特定的注册表,我会有不同的注册表项Motor2Factory。 现在我的问题是:这两种方法中哪一种更可取,为什么?在我看来,第一种情况并非一帆风顺,而且令人费解,因为我在整个代码库中扩展了决定实例化哪种类型的逻辑。在第二种情况下,由于我将需要(几乎)每种具体类型的工厂,因此我实际上在代码中增加了工厂的数量。当将抽象工厂添加到组合中时,这让我更加困惑。 再说一遍:什么时候应该使用一种方法?更重要的是:什么是决定走哪条路的好指标?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.