zoukankan      html  css  js  c++  java
  • Java-接口的本质

    https://mp.weixin.qq.com/s/tEVw0j18rX2hxt-guXQJ-w

    大道至简,本质往往是很朴素的。

     本质:

    类是主体,接口是主体之间交流沟通的规约。

    位置:
    1. 主体站两旁,连接接口的管道在两者之间;
    2. 接口位于主体侧面;
    3. 父类在主体类的头顶上,父类是对子类高一个概念层次的抽象(概念宽泛化);

     

    接口与主体的关系:

    1. 两个沟通的主体,一个使用接口,一个实现接口;
    2. 接口是动作的集合,实现接口,表明主体有能力执行接口约定的动作;
    3. 使用接口的主体不需要实现接口,但需要知道接口:
      a. 不知道约定的常量,则两方所指会有所混淆;
      b. 不知道方法签名会被拒绝服务;
      c. 不知道方法调用顺序,会被拒绝服务;
      d. 使用接口的第一步可以是认证,不具备相应信息则会被拒绝;
    4. 接口是主体的组成部分:
      a. 接口是实现接口的主体的能力;
      b. 接口是使用接口的主体的知识,或者说使用接口也是一种能力;
    5. 主体可以具有多种能力,进行多种沟通,所以可以实现多个接口;

    规约:
    基本的:
    1. 常量用以约定两方所指是同一个东西;
    2. 方法签名以约定如果要对方做什么,需要提供什么;
    组合的:
    3. 如果沟通需要多个步骤,则需要约定调用方法的顺序;
    这种规约Java接口无法实现,需要使用文档来说明和规范;


    举例:
    1. 主体同学甲和主体同学乙;
    2. 主体乙有冰淇淋、冰棍儿,具有卖冰淇淋、冰棍儿的能力;
    3. 主体乙把冰淇淋标记为第一种商品,冰棍儿标记为第二种商品;
    4. 主体甲有钱;
    5. 主体甲知道主体乙卖东西;
    6. 主体甲知道第一种商品是冰淇淋;
    7. 主体甲把钱给主体乙,并告诉他要买第一种商品;
    8. 主体乙确认钱足够,并把第一种商品交付给主体甲;
    9. 主体甲拿到冰淇淋;

    Java描述:
    1. ManJia, ManYi;

    2.

    interface Seller {
        int PRODUCT_BQL = 0;
        int PRODUCT_XG  = 1;
        Product sell(Money money, int productNumber);
    }
    class ManYi implements Seller {
        Product sell(Money money, int productNumber) {
            if (isMoneyNotEnough(money)) {
                return null;
            }
            
            if (productNumber == PRODUCT_BQL) {
                return findBQL();
            }
        }
    }

    4.

    class ManJia {
        Money money = Dad.give(100);
        ManYi seller = Find.found();
        
        public void buy() {
            Product bql = seller.sell(money, Seller.PRODUCT_BQL);
        }
    }

    父类和接口:
    1. 父类和接口是不同的概念,概念不同、位置不同;
    2. 子类做为一个整体进行抽象,提升一个概念层次(泛化),成为父类;
    接口是对子类部分能力的抽象;
    3. 父类的概念比子类宽泛,子类在概念上无法脱离父类的范畴:白马始终是马;
    接口是实现主体的一种能力,从这种能力的角度看,主体才是接口要表达的概念:
    主体乙在卖东西的时候才是Seller;

    为什么优先使用接口,而非抽象父类:
    1. 优先从某种角度去界定,而非从整体上界定,留有余地,方便扩展;

  • 相关阅读:
    Spring 总结
    分布式缓存Memcache
    Docker原理 -- namespace与CGroup
    JDK源码分析--Collections
    React生命周期总结
    【转】前端优化的35条
    http缓存与cdn相关技术
    跨域处理
    sequekize
    orm2
  • 原文地址:https://www.cnblogs.com/wjcdx/p/9123488.html
Copyright © 2011-2022 走看看