首先:大家先帮我解释下什么叫高内聚低耦合。。 
   再解释下:我们使用S2SH框架的时候,所说解开高耦合的问题。
这部懂,是否归根节地就是反射的与实例化的区别。
最后就解释下反射和实例化的区别。。太闷了高手们帮下了

解决方案 »

  1.   

    参考下面的贴子,以及其中引用的文章:
    http://blog.csdn.net/zxianrong/archive/2008/12/08/3478860.aspx这和反射与实例化没什么关系。
      

  2.   

    类就是模板,对象就是实体,实例化就是用一个模子做一个实体的东西出来,那东西就是实例化的结果,实例化的过程就是调用构造方法,完成一系列自定义的初始化动作(如果有的话)分配内存。
    类在被实例化之前是需要根据程序的调用和指定的类型由类加载器加载到内存中,因此在编译期就已经决定了程序走到这儿需要实例化一个什么类,反射是指没有显式指定实例化类的类型,由程序在运行期去根据给定的类名来加载类文件到内存中,尝试实例化,或是反射调用其方法。明显的区别是,前者在编译期就已经知晓该类的结构和需要实例化的地方,后者是在运行期,这个特性在某些情况下是相当的有意义的。试想下,如果想要让编译期就知道ssh需要实例化哪些action,哪些组件,那么楼主所写的东西就会和ssh本身耦合的不成样子。
      

  3.   

    另外还有个横向耦合和纵向耦合的问题。
    前者是类与类的调用依赖关系,如果楼主直接在自己类里面写了Tools tools = new DBTools(),那么DBTools就与这个类有横向耦合(调用者与被调用者的耦合)。ssh在运行期根据配置将具体的实现类注入到需要使用的地方,因此调用端在编译期就无需关心自己所需的服务到底要来自哪个具体的类。
    后者是上下继承关系的耦合,原本struts1和servlet的控制类都需要继承,这就限制了我们去继承其他的类,ssh或struts2的控制类并不强制我们继承或实现什么。
    因此ssh单在横向纵向的关联解耦上,就有明显的改善。