面向接口的编程

什么是接口?

  1. 接口定义了行为的协议,这些行为在继承接口的类中实现。
  2. 接口定义了很多方法,但是没有实现它们。类履行接口协议并实现所有定义在接口中的方法。
  3. 接口是一种只有声明没有实现的特殊类。

接口的优点:

  1. Client不必知道其使用对象的具体所属类。
  2. 一个对象可以很容易地被(实现了相同接口的)的另一个对象所替换。
  3. 对象间的连接不必硬绑定(hardwire)到一个具体类的对象上,因此增加了灵活性。
  4. 松散藕合(loosens coupling)。
  5. 增加了重用的可能性。

实例如下:

(用户持久化类)重构第一步——面向接口编程

  1. 设计用户持久化类的接口UserDao,代码如下:
public interface UserDao {
    public void save(User user);
    public User load(String name);
}
  1. 具体的持久化来必须要继承UserDao接口,并实现它的所有方法。我们还是首先实现内存持久化的用户类:
public class MemoryUserDao implements UserDao{
    private static Map users = new HashMap();;
    static{
        User user = new User("Moxie","pass");
        users.put(user.getName(),user);
    }
 
    public void save(User user) {
        users.put(user.getId(),user);
    }
 
    public User load(String name) {
        return (User)users.get(name);
    }
}

MemoryUserDao的实现代码和上面的MemoryUserPersist基本相同,唯一区别是MemoryUserDao类继承了UserDao接口,它的save()和load()方法是实现接口的方法。

重构第四步-IoC容器

  1. 使用IoC容器,用户注册类UserRegister不用主动创建UserDao实现类的实例。由IoC容器主动创建UserDao实现类的实例,并注入到用户注册类中。我们下面将使用Spring提供的IoC容器来管理我们的用户注册类。
    用户注册类UserRegister的部分代码如下:
public class UserRegister {
    private UserDao userDao = null;//由容器注入的实例对象
    
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }
    // UserRegister的业务方法
}
  1. 在其它的UserRegister方法中就可以直接使用userDao对象了,它的实例由Spring容器主动为它创建。但是,如何组装一个UserDao的实现类到UserRegister中呢?哦,Spring提供了配置文件来组装我们的组件。Spring的配置文件applicationContext.xml代码片断如下:

        


你可能感兴趣的:(面向接口的编程)