什么是接口?
- 接口定义了行为的协议,这些行为在继承接口的类中实现。
- 接口定义了很多方法,但是没有实现它们。类履行接口协议并实现所有定义在接口中的方法。
- 接口是一种只有声明没有实现的特殊类。
接口的优点:
- Client不必知道其使用对象的具体所属类。
- 一个对象可以很容易地被(实现了相同接口的)的另一个对象所替换。
- 对象间的连接不必硬绑定(hardwire)到一个具体类的对象上,因此增加了灵活性。
- 松散藕合(loosens coupling)。
- 增加了重用的可能性。
实例如下:
(用户持久化类)重构第一步——面向接口编程
- 设计用户持久化类的接口UserDao,代码如下:
public interface UserDao {
public void save(User user);
public User load(String name);
}
- 具体的持久化来必须要继承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容器
- 使用IoC容器,用户注册类UserRegister不用主动创建UserDao实现类的实例。由IoC容器主动创建UserDao实现类的实例,并注入到用户注册类中。我们下面将使用Spring提供的IoC容器来管理我们的用户注册类。
用户注册类UserRegister的部分代码如下:
public class UserRegister {
private UserDao userDao = null;//由容器注入的实例对象
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
// UserRegister的业务方法
}
- 在其它的UserRegister方法中就可以直接使用userDao对象了,它的实例由Spring容器主动为它创建。但是,如何组装一个UserDao的实现类到UserRegister中呢?哦,Spring提供了配置文件来组装我们的组件。Spring的配置文件applicationContext.xml代码片断如下:
<bean id="userRegister" class="com.dev.spring.simple.UserRegister">
<property name="userDao"><ref local="userDao"/></property>
</bean>
<bean id="userDao" class="com.dev.spring.simple.MemoryUserDao"/>
网友评论