就以适配器类来说吧
MouseAdapter是抽象类,但是没有抽象方法
(如果他不是抽象的)直接实例化这个类没有没有任何意义
既然我们需要使用这个类,就必然会覆盖某个方法,但又不知道是哪个方法,因此只有将类声明为抽像的
使用者根据需要来覆盖方法
实现接口的适配器类(抽象的)
自定义实现适配器中的某个方法:
测试类:
MouseAdapter是抽象类,但是没有抽象方法
(如果他不是抽象的)直接实例化这个类没有没有任何意义
既然我们需要使用这个类,就必然会覆盖某个方法,但又不知道是哪个方法,因此只有将类声明为抽像的
使用者根据需要来覆盖方法
一个没有抽象方法的抽象类一般来讲都会有诺干空的方法,这些方法不是必须要实现的,但是如果都不去实现这些方法,那这个类就没有什么意义了。
抽象类不能被实例化,也就是不能用new关键字去产生对象
/*
* 问题:
* 接口(方法比较多) -- 实现类(仅仅使用一个,也得把其他的实现给提供了,哪怕是空实现)
* 太麻烦了。
* 解决方案:
* 接口(方法比较多) -- 适配器类(实现接口,仅仅空实现) -- 实现类(用哪个重写哪个)
*/
接口:
package 结构型_适配器模式;
/*
* 针对用户操作的四种功能的一个接口
*/
public interface UserDao {
/**
* 添加
*/
public abstract void add();
/**
* 删除
*/
public abstract void delete();
/**
* 更新
*/
public abstract void update();
/**
* 查询
*/
public abstract void find();
}
实现接口的适配器类(抽象的)
package 结构型_适配器模式;
public abstract class UserAdapter implements UserDao {
@Override
public void add() {
}
@Override
public void delete() {
}
@Override
public void update() {
}
@Override
public void find() {
}
}
自定义实现适配器中的某个方法:
package 结构型_适配器模式;
public class UserDaoImpl2 extends UserAdapter {
@Override
public void add() {
System.out.println("继承适配器后重写添加功能");
}
}
测试类:
package 结构型_适配器模式;
public class UserDaoDemo {
public static void main(String[] args) {
// UserDao dao = new UserDaoImpl();
// dao.find();
//我没有说我们需要四种功能都实现啊
UserDao dao2 = new UserDaoImpl2();
dao2.add();
}
}