打字猴:1.700481279e+09
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>();
1700481312
1700481313 //获得包名称
1700481314
1700481315 String packageName=fatherClass.getPackage().getName();
1700481316
1700481317 //获得包中的所有类
1700481318
1700481319 List<Class>packClasses=getClasses(packageName);
1700481320
1700481321 //判断是否是子类
1700481322
1700481323 for(Class c:packClasses){
1700481324
1700481325 if(fatherClass.isAssignableFrom(c)&&!fatherClass.equals(c)){
1700481326
1700481327 returnClassList.add(c);
1700481328
[ 上一页 ]  [ :1.700481279e+09 ]  [ 下一页 ]