适配器类(便利类)的由来:当你自己写的类中想用某个接口中个别方法的时候(注意:不是所有的方法),肿么办?

有的时候需要将接口和抽象类配合起来使用,这样可以为开发者提供相当的便利性,开发者觉得哪个方便就选用哪个。这样的抽象类称为便利类。此时,便利类并不需要实现接口的所有方法,可以留给继承它的子类去实现它们。

抽象父类提供给子类一个方法,主要是起规范作用,你不写父类这个方法也行。

如果是接口的话,子类就一定要复写父类所有的抽象方法。

-----------------------------------------------------------------------------

当你自己写的类中想用某个接口中个别方法的时候(注意:不是所有的方法),肿么办?

那么你就可以用一个抽象类先实现这个接口(注意:仅仅是空实现:方法体为空),然后再用你的类继承这个抽象类,在你的类中用哪个方法就实现哪个方法,这样就可以达到目的了;

如果你直接用类实现接口,那接口的所有方法都必须实现的。

示例代码如下:

问题:

  接口(方法比较多) --> 实现类(我仅仅是使用其中的一个方法,也得把其他的方法给实现了,哪怕是空实现)

 1 package cn.itcast_03; // 接口
 2 
 3 /*
 4  * 针对用户操作的四种功能的接口
 5  */
 6 public interface UserDao {
 7     public abstract void add();
 8 
 9     public abstract void delete();
10 
11     public abstract void update();
12 
13     public abstract void find();
14 }
 1 package cn.itcast_03; // 实现类
 2 
 3 public class UserDaoImpl implements UserDao {
 4 
 5     @Override
 6     public void add() {
 7         System.out.println("添加功能");
 8     }
 9 
10     @Override
11     public void delete() {
12         System.out.println("删除功能");
13     }
14 
15     @Override
16     public void update() {
17         System.out.println("修改功能");
18     }
19 
20     @Override
21     public void find() {
22         System.out.println("查找功能");
23     }
24 
25 }
 1 package cn.itcast_03; // 测试类
 2 
 3 /*
 4  * 问题:
 5  *         接口(方法比较多) --> 实现类(我仅仅是使用其中的一个方法,也得把其他的方法给实现了,哪怕是空实现)
 6  */
 7 public class UserDaoTest {
 8     public static void main(String[] args) {
 9         UserDao ud = new UserDaoImpl();
10         ud.add();
11         // 该实现类里面实现了四种功能,我仅仅使用一种功能,可是我并不需要实现这么多功能啊!肿么办?
12         
13     }
14 }

解决方案:
  接口(方法比较多) --> 适配器类(实现接口,仅仅是空实现:方法体为空) --> 实现类(用哪个方法就重写哪个方法)

注意:

  适配器类是抽象类

  实现有两种:一种是真正的实现,即方法体里面有内容;另一种是空实现,方法体里面没有内容。

情况1:如果适配器类仅仅是实现了接口,但是并不提供方法的空实现。则适配器类没有起到作用,实现类还是要重写接口的所有方法。问题同上了。(虚晃一枪啊)

情况2:如果适配器类不仅是实现了接口,还提供了方法的空实现。则适配器类就起到作用了,实现类中用哪个方法就重写哪个方法。达到目的!

以下是情况2的示例代码:

 1 package cn.itcast_03; // 接口
 2 
 3 /*
 4  * 针对用户操作的四种功能的接口
 5  */
 6 public interface UserDao {
 7     public abstract void add();
 8 
 9     public abstract void delete();
10 
11     public abstract void update();
12 
13     public abstract void find();
14 }
 1 package cn.itcast_03; // 适配器类
 2 
 3 public abstract class UserAdapter implements UserDao {
 4 
 5     @Override
 6     public void add() {
 7     }
 8 
 9     @Override
10     public void delete() {
11     }
12 
13     @Override
14     public void update() {
15     }
16 
17     @Override
18     public void find() {
19     }
20 
21 }
1 package cn.itcast_03; // 实现类
2 
3 public class UserDaoImpl2 extends UserAdapter {
4     @Override
5     public void add() {
6         System.out.println("添加功能");
7     }
8 
9 }
 1 package cn.itcast_03; // 测试类
 2 
 3 /*
 4  * 解决方案:
 5  *         接口(方法比较多) --> 适配器类(实现接口,仅仅是空实现:方法体为空) --> 实现类(用哪个方法就重写哪个方法)
 6  */
 7 public class UserDaoTest {
 8     public static void main(String[] args) {
 9         UserDao ud2 = new UserDaoImpl2();
10         ud2.add();
11     }
12 }

 

posted @ 2018-04-09 23:16  黑泽君  阅读(238)  评论(0编辑  收藏  举报