是否有可能让具体工厂使用抽象工厂模式创建具有类型特定参数的具体类?还是由他们各自的混凝土工厂创建的不同具体类需要具有相同的领域?在下面的图像中,你将如何用客户端(应用程序)给出的不同参数集来实例化WinButton和OSXButton?如何为抽象工厂创建的类设置特定属性?
回答
一种解决这些问题的方法之一是发送对象的参数。例如,在C#中Object是基类&您可以传递可以接受任何派生类的Object类型的参数。在实现中,这个对象可以被转换回所需的派生类型。甚至可以通过这种方式设置特定的属性。
没有更多细节,这并不容易。我会做的一件事是尝试将参数传递给具体工厂类的构造函数。对于不同的参数,你将不得不创建不同的工厂实例,这可能不是最好的解决方案,但如前所述,这取决于细节。
例子:
GUIFactory factory = new WinFactory(WIN_9x_THEME); Button greyButton = factory.createButton(); factory = new WinFactory(WIN_VISTA_THEME, 50); Button semiTransparentButton = factory.createButton();
这是做这件事的一种方式,但你有点遗漏模式的抽象性,因为正如你所指出的那样,工厂类将不得不为每一组新的参数值重新实例化。你可以直接实例化concrecte类而不是通过工厂类。 – Christian 2011-06-27 06:26:08
@Christian:不是真的......如果你在编码过程中知道各组参数的组合,你可以为工厂设置工厂 - 这有点复杂,所以基于依赖注入的解决方案更有意义。最后,这一切都取决于具体的语言和应用。 – 2011-06-27 08:11:29
嗯......工厂工厂;你可能有代码示例?关于它取决于语言和应用程序,是不是模式应该是语言和应用程序不可知的? – Christian 2011-06-27 20:30:34
- 1. 如何在python抽象类中创建抽象属性
- 2. 为工厂创建抽象工厂是否有意义?
- 3. 将属性添加到抽象工厂
- 4. 如何用静态工厂方法创建抽象类?
- 5. 抽象类工厂方法
- 6. FactoryGirl RSpec创建工厂对象时没有方法错误,其中工厂设置了该对象的属性
- 7. 抽象工厂
- 8. 如何创建工厂为通用类
- 9. 设置属性为动态创建的类不工作在javascript
- 10. ASP.NET如何将属性设置为特定类型的
- 11. 配置在抽象类上定义的Autofac委托工厂
- 12. 如何在Typescript中创建抽象工厂模式?
- 13. FactoryGirl在工厂中设置updated_at属性
- 14. 创建对象并设置属性
- 15. 春天设置抽象豆属性值
- 16. 工厂和抽象工厂模式
- 17. 抽象工厂设计模式 - C#
- 18. 设计模式 - 抽象工厂 - BombedMazeFactory
- 19. 抽象工厂设计模式c#
- 20. 创建抽象类
- 21. DDD我可以使用抽象工厂创建域对象
- 22. 作为战略的抽象工厂?
- 23. 工厂类与抽象方法
- 24. 模板抽象工厂类与池
- 25. JDBC如何使用抽象工厂?
- 26. 如何应用抽象工厂模式?
- 27. 如何设置域对象创建的版本属性?
- 28. 工厂或构造函数 - 在哪里设置对象属性?
- 29. 为抽象类创建对象
- 30. Css设置属性为h2为h6为特定类
使用Object类的泛型类型,然后将其投射到一个特定的类不是因为它很好的解决不是类型安全的,它违反了至少一个面向对象的原则即Liskov替代原则。此外,要创建的具体类可能需要为其各自的构造提供不同数量的参数。 – Christian 2011-05-19 06:34:32
我同意,它不是类型安全的。关于不同数量的参数,你可以有一个由其他类型组成的类型。 – 2011-05-19 07:41:51
您的意思是一个数据结构,您可以在其中存储不同具体类型的创建参数?在这种情况下,每次添加新结构时都必须更改数据结构。 – Christian 2011-05-19 10:05:30