zoukankan      html  css  js  c++  java
  • Go

    为什么需要接口?
    usb插槽就是现实中的接口,你可以把手机,相机,U盘都插在usb插槽上,而不用担心那个插槽是专门插哪个的,原因是做usb插槽的厂家和做各种设备的厂家都遵守了统一的规定包括尺寸,排线等等(一个接口解决所有的外设)。
     
    在Golang中,多态特性主要是通过接口来实现的。
    耦合性降低,通用性增强;
     
    基本介绍
        interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型(比如结构体Phone)要使用的时候,在根据具体情况把这些方法写出来(实现)。
     
    基本语法
        type  接口名  interface{
                method1(参数列表) 返回值列表
                method2(参数列表) 返回值列表
                .......
        }
        func (t 自定义类型) method1(参数列表) 返回值列表 {
                // 方法实现
        }
        func (t 自定义类型) method2(参数列表) 返回值列表 {
                // 方法实现
        }
     
    小结说明:
        1.接口里的所有方法都没有方法体,即接口的方法都是没有实现的方法,接口体现了程序设计的多态和高内聚低耦合的思想。
        2.Golang中的接口,不需要显式实现,只需要一个变量,含有接口类型中的所有方法。那么这个变量就实现了这个接口。因此,Golang中没有implement这样的关键字。
     
    接口应用场景
        项目经理,管理几个程序员,开发一个软件,为了控制和管理软件开发的进度和规范,项目经理可以提前定义一些接口,让程序员去具体实现这些接口;
     
    接口的细节说明
        1.接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例);
        2.接口中所有的方法都没有方法体,即都是没有实现的方法;
        3.在Golang中,一个自定义类型需要将某个接口的所有方法都实现,我们说这个自定义类型实现了接口;
        4.一个自定义类型只有实现了某个接口,才能将该自定义类型的实例(变量)赋给接口类型;
        5.只要是自定义数据类型,就可以实现接口,不仅仅是结构体类型(可以是任意类型)。
        6.一个自定义类型可以实现多个接口(Golang实现接口是基于方法而不是接口,所以很灵活);
        7.Golang接口中不能有任何变量;
        8.一个接口(比如A接口)可以继承多个别的接口(比如B,C接口),这时如果要实现A接口,也必须将B,C接口的方法也全部实现(接口之间可以继承)。
        9.interface类型默认是一个指针(引用类型),如果没有对interface初始化就使用,那么会输出nil
        10.空接口interface{} 没有任何方法,所以所有类型都实现了空接口,即我们可以把任何一个变量赋给空接口;
     
     
    接口的最佳实现
        实现对结构体切片的排序:sort.Sort(data  interface)
     
     
    实现接口和继承的比较
        接口是对继承的一种补充(猴子还想像小鸟一样飞,像小鱼一样游泳)
        // 总结    
        // 当A结构体继承了B结构体,那么A结构体就自动的继承了B结构体的字段和方法,并且可以直接使用     
        // 当A结构体需要扩展功能,同时不希望去破坏继承关系,则可以去实现某个接口即可,因此我们可以认为,实现接口是对继承机制的补充;
     
        接口和继承解决的问题不同
            继承的价值主要在于:解决代码的复用性和可维护性。
            接口的价值主要在于:设计,设计好各种规范(方法),让其它自定义类型去实现这些方法;
            
        接口比继承更加灵活
            接口比继承更加灵活,继承是满足is  -- a 的关系,而接口只需要满足 like -- a 的关系。
        
        接口在一定程度上实现代码解耦
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    2020/3/12
    练习题1
    2020/3/26
    2020/3/25
    2020/3/24
    2020/3/23
    应用层
    bzoj3326[SCOI2013]数数
    HEOI2017游记
    bzoj4417[SHOI2013]超级跳马
  • 原文地址:https://www.cnblogs.com/guo-s/p/14160663.html
Copyright © 2011-2022 走看看