zoukankan      html  css  js  c++  java
  • 面向对象编程三大特征4

    接口(interface)

    按顺序,我们应该讲解多态,但是在讲解多态前,我们需要讲解接口(interface) ,因为在Golang中 多态特性主要是通过接口来体现的。

    接口快速入门:

    这样的设计需求在Golang编程中也是会大量存在的,我曾经说过,一个程序就是一个世界,在现实世界存在的情况,在程序中也会出现。我们用程序来模拟一下前面的应用场景。

    案例:

    package main
    import (
      "fmt"
    )

    //声明一个接口
    type Usb interface {
      //声明了两个没有实现的方法
      Start()
      Stop()
    }

    type Phone struct {

    }

    //让Phone 实现 Usb接口的方法
    func (p Phone) Start() {
      fmt.Println("手机开始工作...")
    }

    func (p Phone) Stop() {
      fmt.Println("手机停止工作...")
    }

    type Camera struct {

    }

    //让camera 实现了Usb接口的方法
    func (c Camera) Start() {
      fmt.Println("相机开始工作...")
    }

    func (c Camera) Stop() {
      fmt.Println("相机停止工作...")
    }

    //计算机
    type Computer struct {

    }

    //编写一个方法Working 这个方法接收Usb接口类型的变量
    //只要是实现了 Usb接口 (所谓实现Usb接口就是指实现了Usb接口声明的所有方法)
    func (c Computer) Working(usb Usb) { //usb 变量会根据传入的实参,来判断到底是Phone,还是Camera
      //通过usb接口变量来调用Start和Stop方法
      usb.Start()
      usb.Stop()
    }

    func main() {
      //测试
      //先创建结构体变量
      computer := Computer{}
      phone := Phone{}
      camera := Camera{}

      //关键点
      computer.Working(phone)
      computer.Working(camera)
    }

    说明: 上面的代码就是一个接口编程的快速入门案例

    Go接口特点和语法说明:

    基本介绍:

      interface 类型可以定义一组方法,但是这些不需要实现。并且interface 不能包含任何变量。到某个自定义类型(比如结构体Phone) 要使用的时候,在根据具体情况把这些方法写出来。

    基本语法:

    type 接口名 interface {

      method1(参数列表) 返回值列表
      method2(参数列表) 返回值列表
      ...
    }

    实现接口所有方法:

    func (t 自定义类型) method1(参数列表) 返回值列表 {
      //方法实现
    }

    func (t 自定义类型) method2(参数列表) 返回值列表 {
      //方法实现
    }
    //...

    小结说明:

    1)接口里的所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的多态和高内聚低耦合的思想。

    2)Golang中的接口,不需要显式的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口。因此,Golang中没有implement这样的关键字


    接口的应用场景介绍:

    对初学者来说,理解接口的概念不算太难,难的是不知道什么时候使用接口,下面我例举几个应用场景:

    1.说现在美国要制造轰炸机,武装直升机,专家只需把飞机需要的功能/规格定下来即可,然后让别的人具体实现就可。

    2.说现在有一个项目经理,管理三个程序员,开发一个软件,为了控制和管理软件,项目经理可以定义一些接口,然后由程序员具体实现。

  • 相关阅读:
    网络数据处理
    进程间通信和网络
    附加的操作系统服务
    通用操作系统服务
    UIScrollView 子控件的自动布局经验
    UIImage 添加水印
    数据类型
    ios 获取手机的IP地址
    UILAbel 设置了attributedText 后省略号不显示
    swift
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11415423.html
Copyright © 2011-2022 走看看