美文网首页Go语言GO语言系列
GO语言初级学习之代码案例06 (面向对象)

GO语言初级学习之代码案例06 (面向对象)

作者: 大爬虫Shalom | 来源:发表于2018-08-08 23:38 被阅读23次

@(go语言 黑马)[GO语言]

实现计算器

  • 题目:面向对象思想实现计算器

  • 逻辑:1、 定义好加减乘除的结构体;
    2、绑定好各自的方法,方法名都和接口名相同;
    3、定义接口,把结构体们的方法融合在一起;
    4、定义工厂结构体;
    5、编写工厂结构体的方法,这是整个代码的核心;
    6、主函数通过工厂变量把所要的值返回出来,赋给一个变量,再打印输出;

  • 代码如下

package main

import "fmt"

type Opt struct { //父类结构体,为了方便接口的调用,把加法减法放在不同的子类中;
    num1 int
    num2 int
}
type Addopt struct { //加法结构体
    Opt
}
type Subopt struct { //减法结构体
    Opt
}

//定义接口
type Jiekou interface {
    Calculate() int
}

//给加减法结构体绑定方法
func (a *Addopt) Calculate() int {
    return a.num1 + a.num2
}
func (b *Subopt) Calculate() int {
    return b.num1 - b.num2
}

//定义多态
func poly(jie Jiekou) (value int) {
    value = jie.Calculate()
    return
}

type factory struct { //工厂的作用就是整合所有的方法,判断输入的命令,并根据判断结果分配不同的方法
}

func (fac *factory) Result(num1 int, num2 int, synbol string) (value int) {
    var jie Jiekou //最终还是要通过接口实现方法
    //通过接口实现,必须定义接口变量,不同的接口变量对应不同的方法
    //接口变量被赋值为能够实现该接口的结构体变量,调用绑定该结构体的方法
    switch synbol { //通过switch给接口变量赋不同的值
    case "+":
        jie = &Addopt{Opt{num1, num2}}
    case "-":
        jie = &Subopt{Opt{num1, num2}}
    }
    value = poly(jie) //利用多态调用接口,并输出返回值
    return
} //这是绑定在factory的方法

func main() {
    var fac factory
    value := fac.Result(12, 23, "+")
    fmt.Println(value)
}

相关文章

网友评论

    本文标题:GO语言初级学习之代码案例06 (面向对象)

    本文链接:https://www.haomeiwen.com/subject/awmfbftx.html