编程总结(五)

23。现在在设计一个自己用的多线程的程序。架构什么完全自己来设计,在实际的设计过程中,产生了一个这样的疑惑。就是是否需要把一个线程内做的事情,压缩成一个进程。估计说的有点模糊
     

   public interface Task {
            public void execute();
        }

 
       这是一个接口。execute为要执行的任务的具体执行方法。那么问题也就是,如此的一个接口是否需要继承Runnable接口?这个问题,目前为止还没有正式决定。所以我这里只能说说我的想法和暂时的决定。
       基本的思路,还是降低耦合度。如果让Task继承Runnable接口。那么任务的具体执行就必须要以一个线程的角度来思考。换句话说,Task是 Runnable的,是其一个特例。这看起来很美。但是要由于一旦这样的耦合,那么Task如果想要扩展,就会变得相当的麻烦,因为它和线程已经耦合。比如说我要在execute之前执行一个操作A,之后,需要做一个操作B。那么我必须修改execute代码。或者用Spring的AOP。但是如果不是这样做,又感觉做的很麻烦。类很多。
      

24。由于很喜欢Spriong的DI。写手机程序的时候不能用Spring。所以就自己模仿着Spring来写一个建议的Factory类。基本实现,用的是反射。不过遇到了个问题。
         public Object getBean(String bean,Object...args)
        这个方法的实现过程中,比方说有个这样的类
       

 class Foo{
                 public Foo(Object object){

                 }
        }

 
        但是如果调用工厂方法的getBean( bean,new String("test"))总是报找不到方法的错误。这才明白,确定方法的时候,参数的子类不能用来确定方法。后来写了一个,才解决问题。

       protected Constructor<?> getConstructor(String bean,Class<?>[] argtype) throws NoSuchMethodException{
        
        Constructor<?> result = null;
        //get class by bean name
        Class<?> beanclass = this.getClassObject(bean);    
        
        //get constructor's array
        Constructor<?>[] bean_cons = beanclass.getConstructors();
        
        Class<?>[] cons_type;                        //the arg type for each constructor
        
        //loop the constructor's array and find the constructor
        for(Constructor<?> constructor:bean_cons){
            
            cons_type = constructor.getParameterTypes();
            
            
            if(cons_type.length==argtype.length){
                try{
                  
                  for(int i=0;i<cons_type.length;i++){
                      //check each arg's class is same or is sub class for the 
                      if(!(cons_type[i].equals(argtype[i])||
                              cons_type[i].isAssignableFrom(argtype[i]))){
                          throw new HasNotFoundException();           //这个异常只是为了代码的美观。
                      }                      
                  }
                  result = constructor;
                  return result;
                }catch(HasNotFoundException e){
                    
                }                
            }
        }
        throw new NoSuchMethodException();
    } 

   

25。回到那个Task。现在先用一个ThreadTask,继承Task和Runnable来解决问题。也算是面向对象的优势吧。可以通过继承,来提供另一套的解决方法。

26。这只能算是一个尝试吧。

   

        public interface Task {
            public void execute();
            //这只是一个标志类
            public static interface TaskProperty{
            }
        }

 
         因为每个Task所需要的信息完全不相同。所以想要把其信息封装成一个一个TaskProperty。这样进行的不知道效果会怎么样?
        至少现在有点感觉画蛇添足的感觉,因为这样可以使得每个Task能够解耦。但是却使得TaskProperty封装了起来。不过觉得这样做能够使得行为和数据分离。对这一块还是很不了解。慢慢。看写好后的效果怎么样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值