打字猴:1.700481252e+09
1700481252
1700481253 for(Class c:classes){
1700481254
1700481255 CommandName commandName=null;
1700481256
1700481257 try{
1700481258
1700481259 //产生实例
1700481260
1700481261 commandName=(CommandName)Class.forName(c.getName())
1700481262
1700481263 .newInstance();
1700481264
1700481265 }catch(Exception e){
1700481266
1700481267 //TODO异常处理
1700481268
1700481269 }
1700481270
1700481271 //建立链表
1700481272
1700481273 if(commandNameList.size()>0){
1700481274
1700481275 commandNameList.get(commandNameList.size()-
1700481276
1700481277 1).setNext(commandName);
1700481278
1700481279 }
1700481280
1700481281 commandNameList.add(commandName);
1700481282
1700481283 }
1700481284
1700481285 return commandNameList;
1700481286
1700481287 }
1700481288
1700481289 }
1700481290
1700481291 Command抽象类有两个作用:一是定义命令的执行方法,二是负责命令族(责任链)的建立。其中buildChain方法负责建立一个责任链,它通过接收一个抽象的命令族类就可以建立一条命令解析链,如传递AbstarctLS类就可以建立一条解析ls命令族的责任链,请读者注意如下这句代码:
1700481292
1700481293 commandName=(CommandName)Class.forName(c.getName()).newInstance();
1700481294
1700481295 在一个遍历中,类中的每个元素都是一个类名,然后根据类名产生一个实例,它会抛出异常,例如类文件不存在、初始化失败等,读者在设计时要实现该部分的异常。我们再来想一下,每个实现类的类名是如何取得的呢?看下面这句代码:
1700481296
1700481297 List<Class>classes=ClassUtils.getSonClass(abstractClass);
1700481298
1700481299 根据一个父类取得所有子类,是一个非常好的工具类,其实现如代码清单34-8所示。
1700481300
1700481301 代码清单34-8 根据父类获得子类
[ 上一页 ]  [ :1.700481252e+09 ]  [ 下一页 ]