@(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)
}