美文网首页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