系统框架:一棵"命令"树,一棵"数据"树,命令树的根,即顶端元素是一个抽象类或接口,对外提供一个 execute 方法,但是这个方法的返回类型会因为命令的不同而不同,在这里举两个个实例,以学生选课来说。
命令一、学生选的课的列表 GetMyCourseCommand 命令的 execute() 方法应返回一个 List。
命令二、是不是选了某一个课程 CourseIsSelectedCommand 命令的 execute() 方法返回一个 Boolean。
这样的话,我的接口会定义成:
[code]
public interface Comamnd<T>{
public T execute();
}
[/code]
由于我不想让客户端知道自己到底调用了哪一个命令,于是写一个工厂来生产 Command,由于是工厂,所以 getCommand() 方法将被设置成 static 的,很简单,我犯不着每次想得到一个 Command 都创建一个 Factory 对象。
这样,客户端要做的,就是根据需求创建不同的 Data 对象,并将 data 对象传入工厂方法,刚才提及的 getCommand() 的完整定义是
[code]public static Command getCommand(Data d);[/code]
至此,客户端在处理上述例子时对应应该做的就是:
例子一、
[code]
Data d = new GetMyCourseData(params...);
Command<List> cmd = CommandFactory.getCommand(d);
List<Course> list = cmd.execute();
[/code]
例子二、
[code]
Data d = new CourseIsSelectedData(params...);
Command<Boolean> cmd = CommandFactory.getCommand(d);
boolean isSelected = cmd.execute();
[/code]
客户端好像挺清晰的,但是 Java 的泛型却提示了警告,在中间那行生产Command对象的代码那。
试过N多方法,除了 new 一个工厂对象出来,并将 getCommand 改为成员方法外,都无法消除这个警告。当然,我也不确定这个做法是不是有点设计过度 :-(
这个警告能消除吗?
<怎么预览的时候代码多个几个?>
命令一、学生选的课的列表 GetMyCourseCommand 命令的 execute() 方法应返回一个 List。
命令二、是不是选了某一个课程 CourseIsSelectedCommand 命令的 execute() 方法返回一个 Boolean。
这样的话,我的接口会定义成:
[code]
public interface Comamnd<T>{
public T execute();
}
[/code]
由于我不想让客户端知道自己到底调用了哪一个命令,于是写一个工厂来生产 Command,由于是工厂,所以 getCommand() 方法将被设置成 static 的,很简单,我犯不着每次想得到一个 Command 都创建一个 Factory 对象。
这样,客户端要做的,就是根据需求创建不同的 Data 对象,并将 data 对象传入工厂方法,刚才提及的 getCommand() 的完整定义是
[code]public static Command getCommand(Data d);[/code]
至此,客户端在处理上述例子时对应应该做的就是:
例子一、
[code]
Data d = new GetMyCourseData(params...);
Command<List> cmd = CommandFactory.getCommand(d);
List<Course> list = cmd.execute();
[/code]
例子二、
[code]
Data d = new CourseIsSelectedData(params...);
Command<Boolean> cmd = CommandFactory.getCommand(d);
boolean isSelected = cmd.execute();
[/code]
客户端好像挺清晰的,但是 Java 的泛型却提示了警告,在中间那行生产Command对象的代码那。
试过N多方法,除了 new 一个工厂对象出来,并将 getCommand 改为成员方法外,都无法消除这个警告。当然,我也不确定这个做法是不是有点设计过度 :-(
这个警告能消除吗?
<怎么预览的时候代码多个几个?>