打字猴:1.700481262e+09
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 根据父类获得子类
1700481302
1700481303 public class ClassUtils{
1700481304
1700481305 //根据父类查找到所有的子类,默认情况是子类和父类都在同一个包名下
1700481306
1700481307 public static List<Class>getSonClass(Class fatherClass){
1700481308
1700481309 //定义一个返回值
1700481310
1700481311 List<Class>returnClassList=new ArrayList<Class>();
[ 上一页 ]  [ :1.700481262e+09 ]  [ 下一页 ]