请教benq大哥strategy模式在实际中的一个应用

04-05-31 daemonx
mvc结构中,向数据库中导入文件时,需要针对table来导入,先考虑简单的情况,即一个文件只对应一个表。

现有四个文件,分别要导入四个表格中(他们的字段不同),这时就表示要有四种不同的方法来分别处理四个不同的表格。

按照strategy模式的逻辑,可以将四种不同的处理表格的方法分别包装到四个类中,暂且分别叫他们StuModel, TchModel, EntModel, FamiModel,然后为这四个类抽象出一个接口,名为Model,然后在ImportExcel中使用类似如下的代码使用Model类:

public class ImportExcel{

private Model=null;

ImportExcel(Model aModel){

Model=aModel;

}

public doImport(){

……

}

……

}

我有几个问题,

第一个问题是,我不确定我对strategy模式的理解准不准确,使用的是不是正确。

第二个问题是,在这种情况中使用strategy模式有没有问题。

第三个问题是,strategy模式是用来方便的更换算法的,通常来说是根据用户的不同需要,跟用户进行交互,由用户来选择一种算法,比如说gui上使用一个下拉列表,上边列出了若干算法,这个时候确定按钮中应该如何处理用户在下拉列表中的选择,创建不同类型的Model?(下拉列表中通常传回的是String吧?不知有没有方法直接传回相应的Model类,JComboBox在列表中显示时是调用Objct.toString()来显示add()到其中的Object吗?)我猜是使用Class.forName(),不知对不对:)

第四个问题是,如果在没有用户交互的情况下使用strategy模式有什么优势。

问题多了点,而且很初级,请不吝赐教,谢谢了先。

banq
2004-06-01 21:13
>第一个问题是,我不确定我对strategy模式的理解准不准确,使用的是不是正确。

我感觉使用Factory模式更好一些,strategy模式完全是算法策略,而你这里好像除了算法,还有不同的算法结果,产品

>第二个问题是,在这种情况中使用strategy模式有没有问题。

一定使用,初期不会有问题,问题是在扩展或Refactorying才发现

>第四个问题是,如果在没有用户交互的情况下使用strategy模式有什么优势。

strategy模式是独立于客户端变化的,而你是依据客户变化,使用strategy模式 不妥当,strategy模式是一个小模式,行为模式,非常简单,而你这里涉及到元素很多,需要考虑结构模式或创建型模式去做。

我认为应该是Command + Factory结合。

在用户界面互动中,惯例已经是Event驱动Command了,可以参考我的书籍相关事件模式描述。

猜你喜欢