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

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

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

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

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

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

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

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

    示例代码如下:

    问题:

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

     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 }
  • 相关阅读:
    C#获取HTML文件指定DIV内容
    剔除editor编辑器中的HTML标签
    ASP.NET MVC 在WebService中Token的使用方法
    MVC如何在单独的类库中添加区域
    原来写插件还可以选MEF
    EF CodeFirst学习
    .Net EF 学习之model first
    sql分页存储过程,带求和、排序
    软实力
    微软的XML可视化编辑器:XML Notepad 2007
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8763655.html
Copyright © 2011-2022 走看看