Java杂谈(七)--接口& 组件、容器

解决方案 »

  1.   

    写了一大段回复,居然丢了。郁闷啊!重写只好。ArrayList   list   =   new   ArrayList();                 //笔者不说反对,但至少不赞成 
    List   list   =   new   ArrayList(); //笔者支持 
    如果楼主是讨论一个接口中声明方法时是用 List getList() 好,还是 ArrayList getList() 好,那显然,99%的情况应该选择前者。但是如果是在一个方法内部声明局部变量,那么 ArrayList list 和 List list 比较,还是后者好。一个很可能的情况就是,如果用 List list,当我需要调用一个List不提供而ArrayList提供了的方法时,我必须cast,而多次调用则要多次cast,而这些cast显然是无谓的,况且cast开销很大。a) 表示层(Jsp、Html、Javascript、Ajax、Flash等等技术对其支持)   
    b) 控制层(Struts、JSF、WebWork等等框架在基于Servlet的基础上支持,负责把具体的请求数据(有时卸载重新装载)导向适合处理它的模型层对象) 
    c) 模型层(笔者认为目前最好的框架是Spring,实质就是处理表示层经由控制层转发过来的数据,包含着大量的业务逻辑) 
    d) 数据层(Hibernate、JDBC、EJB等,由模型层处理完了持久化到数据库中) 
    这个分类也有问题啊:struts/jsf/webwork等框架更多的是着眼于展现层的,控制层只是side-effect;spring是个容器,可以包容任何层的组件,如果非要定义在模型层,恐怕不妥;EJB中有持久化管理的内容,但还有更多内容不属于数据层。
      

  2.   

    2楼的朋友说得很有道理,
    其实我的本意不是说那些框架只是着眼于某一个层,比如Spring就是贯穿所有层的,但是贯穿是贯穿,我只是想列举它最显著的特点是在哪一层,例如Struts最显著的特点就是控制转发,所以才在控制层中来列举,而Spring最大的特点就是处理业务时候的依赖注入和AOP技术,所以才在模型层它提出来所以可能我的描述不太妥当,但是就这个标题的四层,我觉得并没有什么不对的地方,也许你也有自己的思想。另外一个问题是ArrayList和List,你说得也没错,当要用到ArrayList的方法而List没有时,确实应该用ArrayList做声明,这也是我无法说明跟我争论那同学的主要原因,我只是觉得自己有这个意识在任何时候能用接口的绝对不用实现类,只是一个习惯问题,所以我也说了我不反对用ArrayList做签名。如果你更多的反思一下J2ee框架中的那些结构,接口定义下来是不应该被实现类去扩展自己的方法的,即使有扩展接口定义之外的方法,也是private的在Class内部为其他接口定义的方法来服务的,因为这才符合J2ee的设计思想。在J2se中接口只是具有某种行为的一个语法结构,可以任意被扩展
    可是在J2ee中的接口就是严格定义的一套规则必须遵守,不应该出现实现类可以调用而接口却没有定义的方法出现了Anyway,你也有自己的体验和想法,我们只是互相讨论而已,呵呵!
      

  3.   

    ArrayList       list       =       new       ArrayList();                                   //笔者不说反对,但至少不赞成   
    List       list       =       new       ArrayList();   //笔者支持   我觉得  在公布出去给外部调用的方法 或者 类 的参数中  使用List 还是 ArrayList 比较有讲究
    在内部逻辑实现的时候 大多会考虑性能 所以就会具体到使用ArrayList LinkList的特性
      

  4.   

    Ant_Yan 大哥,你的连载很好,我很敬佩你。
    我承认我自己是笨鸟还惰于早飞。
    现在快毕业了很是遗憾。
    前些日子开始学习java确实走了“直接去学J2ee跳过J2se”的弯路了。
    现在正在回头学习j2se。
    我至今仍不能对java整体有一个系统的认识。
    或者说我的脑子里还没有一个清晰的框架。前天跟我们的斑竹imA提起过一个想法,
    咱们csdn的各位高手可不可以 写一个连载,以java的关键词为主线。可以给初学者一个类似人体结构图那样的描述。
    (可以考虑用类比的方法,把java的各个类通俗易懂的描述出来,
    甚至您连一行代码都不涉及,只希望您可以把它们的机制解释清楚就万分感谢了)
    让初学着能够在尽量短的时间里对java 有个整体认识,然后再去挨个攻坚。