是否可以让具体工厂使用抽象工厂模式为它们创建具有类型特定参数的具体类?或者它们各自的具体工厂创建的不同具体类是否需要具有相同的字段?
例如)在下图中,您将如何使用客户端(应用程序)给出的不同参数集实例化 WinButton 和 OSXButton?
是否可以让具体工厂使用抽象工厂模式为它们创建具有类型特定参数的具体类?或者它们各自的具体工厂创建的不同具体类是否需要具有相同的字段?
例如)在下图中,您将如何使用客户端(应用程序)给出的不同参数集实例化 WinButton 和 OSXButton?
解决此类问题的方法之一是发送对象参数。例如,在 C# 中,Object 是基类,您可以传递 Object 类型的参数,该参数可以采用任何派生类。在实现中,可以将此对象转换回所需的派生类型。甚至可以通过这种方式设置特定属性。
如果没有更多细节,这并不容易。我会做的一件事是尝试将参数传递给具体工厂类的构造函数。对于不同的参数,您必须创建不同的工厂实例,这可能不是最好的解决方案,但正如所说,这取决于细节。
例子:
GUIFactory factory = new WinFactory(WIN_9x_THEME); 按钮 grayButton = factory.createButton(); 工厂=新WinFactory(WIN_VISTA_THEME,50); 按钮 semiTransparentButton = factory.createButton();