"将接口从具体实现中解藕使得接口可以应用于多种不同的具体实现,增强代码复用性"
耦合的概念和具体表现是甚么?看接口看到这节不怎么懂,里面的代码都是分开了2大部分一共4段来解释,涉及很多个文件,看不是很懂.
有没有简单点易懂的例子讲解这个方面和代码服用?

解决方案 »

  1.   

    低耦合,就是说要尽可能的减少模块(方法,类,类簇)间的的联系,意思就是,改变一个模块,要尽可能少的影响到其他模块,相应的,增加一个模块,也要尽量少的改变现有的模块。
    比喻下:
    搭积木玩过把,拆掉一个积木,房子还没倒,加上一个积木,不用毁坏现有的房子。适配器设计模式
    设计模式中用的比较多的一个模式简单来说就是:把不兼容的接口通过一个适配器来使之可以用于现有的系统。
    再比喻下:
    数码相机用过把,相机用的SD卡,不能直接插到USB里,因为她们接口不一样啊,怎么插?于是你就去买了一个读卡器,一头是SD接口,一头是USB接口,一连上,OK,可以用了。这里的读卡器,就是一个适配器。
      

  2.   

    我学JAVA有段时间了,但是对耦合这个概念很模糊,今天清楚点了,如果高手们没讲清楚!请大家继续补充
      

  3.   

    举个例子吧,比如有个具体类UserDao,用来取得用户信息public class UserDao{
        public User getUserByName(String name){
            //访问xml文件,从xml中读取用户信息,代码省略...
        }
    }然后你在你的业务方法里通过调用UserDao的getUserByName()方法来访问用户信息User user = new UserDao().getUserByName("Mike");这样你的业务方法就依赖于UserDao这个具体类,也就是紧耦合然而,因为业务发生了变化,xml文件已经不再适合你的项目,你需要把用户信息存放在DB中
    因为你的业务方法和UserDao是紧耦合的,所以要么你修改UserDao,把里面访问xml文件的代码改成访问DB的代码,或者是再写一个访问数据库的类UserDaoFromDB,里面也实现getUserByName()方法,然后修改业务方法中所有调用UserDao的地方,都改成调用UserDaoFromDB的方法。
    以上两个方案都不是很好,只是底层的存储方案改变了(xml文件变成数据库),却要影响到上层的业务层,都要修改原有的代码,这就是紧耦合造成的后果但如果换成依赖接口,先设计一个接口IUserDaopublic interface IUserDao{
        public User getUserByName(String name);
    }public class UserDaoFromXML implements IUserDao{
        public User getUserByName(String name){
            //访问xml文件,从xml中读取用户信息,代码省略...
        }
    }public class UserDaoFromDB implements IUserDao{
        public User getUserByName(String name){
            //访问数据库,从数据库中读取用户信息,代码省略...
        }
    }//这是工厂类
    public class UserDaoFactory{
        public static IUserDao getDao(){
            //访问配置文件,从配置文件中获取参数
             String dataType = ...;         //根据参数,来决定是返回UserDaoFromXML还是UserDaoFromDB
            if(dataType.equals("db"}){
                return new UserDaoFromDB();
            } else {
                return new UserDaoFromXML();
            }
        }
    }//下面是业务方法
    IUserDao dao = UserDaoFactory.getDao();
    User user = dao.getUserByName("Mike");
    这样,业务层就不依赖于某个具体实现类,而是依赖于接口,至于Factory返回的到底是读取XML文件的Dao还是返回读取数据库的Dao,业务层都不再关心,也不需要关心,而且不管你返回的什么,对业务层都没有影响,这就是松耦合