zoukankan      html  css  js  c++  java
  • List集合与面向接口

    以前基础学不太好,比如说使用List集合 List<String>list = new ArrayList(String); 以为只有这一种调用的方法,list集合诞生出来就是这样调用的,就像是人诞生出来就有一个头,两只手,两只脚,最近发现 ArrayList list = new ArrayList(String);也可以调用到list的方法,打破了我那种观念,一定要知道这是为什么,于是查了一些资料:

    List接口继承了Collection接口,ArrayList类实现了List接口。

    一般去使用 List<String>list = new ArrayList(String) 而不是ArrayList list = new ArrayList(String)

    是因为前者是“面向接口编程”,前者只能使用List接口里面声明的方法,后者可以使用除了接口以外的方法。

    设计模式中有:“代码尽量依赖于抽象,不依赖于具体”。第二种形式就是依赖具体,第一种形式就是依赖于抽象。

    List的实现类不止ArrayList一种,还有LinkedListRoleListVector等等。比如说你想换用RoleList的时候,使用第一种形式的话 List<String>list = new RoleList(String),改掉后面半部分就行了,后面的代码不需要修改,因为List接口保证了调用的都是接口中声明的方法,如果使用第二种形式的话就麻烦一点了,RoleList rl = new RoleList(String),因为不能保证rl调用的就是List接口中的方法,可能要改好多代码。

    接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则,如果程序能按照这个规则就不容易出错了。就像人类社会定制的各种规则(法律,校规等)一样,可以预防犯错,还能提高效率。

    接口只关心“做什么”,不需要关心“怎么做”,至于“怎么做”交给实现类完成,比如说项目里面需要用到支付宝完成支付,在项目里面只需要把交易信息传递给支付宝接口并调用,支付宝会返回给你成功或者失败的结果,你不需要去费时间写支付宝的实现代码。支付宝只把接口暴露出来让别人调用,不让你看到它的实现代码,这样还具有安全性

    实际上这样做,在 Java 中还有很多,像 JDBC 中的 Connection、PreparedStatment、ResultSet 等等,这些都是接口,如果不去研究 JDBC驱提供的源代码,根本就不会知道其具体的实现类是哪一个,对于开发人员来说,只要知道这些接口中的方法,以及该如何使用这些方法就足够了,不需要去考虑底层的实现,正因为此,换一种数据库只要更改其连接驱动和连接字符串就够了,其他的根本用不着改。另一种角度来说,jdbc是sun提供的一种接口,各大数据库公司按照这个接口规范去开发数据库驱动(实现类),程序员在调用的时候就很方便了,不用对每一种数据库写对应的操作方法

  • 相关阅读:
    【POJ】[1703]Find them, Catch them
    【杭电】[2717]Catch That Cow
    【杭电】[2717]Catch That Cow
    【杭电】[1716]排列2
    【杭电】[1716]排列2
    【杭电】[2084]数塔
    【杭电】[2084]数塔
    【杭电】[1003]Max Sum
    【杭电】[1003]Max Sum
    [leetcode]117. Populating Next Right Pointers in Each NodeII用next填充同层相邻节点
  • 原文地址:https://www.cnblogs.com/sflik/p/4545343.html
Copyright © 2011-2022 走看看