工厂模式问题

时间:2010-08-07 05:11:59

标签: design-patterns

我是OO的N00b。因为没有回答或没有任何积分,人们向我挥手致意。 我能说什么除了,我不合格!

无论如何,这是我的问题 我在经典的“Book”样本中看到了足够多的继承示例 动物,熊咆哮,猫喵等...

假设我正在根据某些数据(数据库,XML)动态创建Windows控件

假设我创建了一个名为CreateControl的静态工厂,并传入控件类型 c用于组合框,t用于文本框等 所以我有以下语法 控制c = CreateControl('c'); 这给我一个ComboBox

到目前为止,工厂模式正在发挥作用。 无论何时我想引入另一个控件,我都会转到工厂模式切换语句并添加另一个控件类型。

在我的winforms中,对于我使用这个强大的工厂模式创建的每个控件,我想根据我得到的控件创建事件处理程序 例如,如果我正在创建ComboBox,我会为5个不同的事件创建事件处理程序 如果控件是文本框,则有2个事件。 因此,根据创建的控件,有不同的事件处理程序具有不同的签名。

某些事件需要来自控件所在表单的值,有些不需要

我有这个switch语句,用于根据我创建的控件声明事件! 我如何在后面的代码中使用代码中的那部分代码并做正确的事情,即关注点的分离以及代码中的少量代码或零代码!!

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

  1. 传递类型而不是char或 字符串或任何工厂。 使用Activator进行实例化。 这样工厂获益 灵活性

  2. 通过工厂Hashtable<Type, List>告诉每个控件 输入要收听的事件。

  3. 开始接受答案。这也可以在1之前完成。

答案 1 :(得分:0)

你对switch语句的讨论听起来好像是在误解你在做什么。

有两种类型的Factory,一个静态助手,它听起来像你想要/使用的和依赖注入。

首先,您在一个类上执行一个或多个静态方法,这些方法为对象执行常见的构造代码 - 因此创建一个并设置它的事件处理程序。我不确定你为什么要传递一封信而不是每种类型创建一种方法。

第二种是依赖注入的形式,其中声明了一个工厂接口,它具有创建对象的方法,然后调用者传递接口的各种实现以获取创建的不同对象,因此创建一个创建文本的Combos控件。