@(go語言 黑馬)[GO語言]
實現(xiàn)計算器
題目:面向?qū)ο笏枷雽崿F(xiàn)計算器
邏輯:1晕粪、 定義好加減乘除的結(jié)構(gòu)體挤悉;
2渐裸、綁定好各自的方法巫湘,方法名都和接口名相同;
3昏鹃、定義接口尚氛,把結(jié)構(gòu)體們的方法融合在一起;
4洞渤、定義工廠結(jié)構(gòu)體阅嘶;
5、編寫工廠結(jié)構(gòu)體的方法载迄,這是整個代碼的核心讯柔;
6、主函數(shù)通過工廠變量把所要的值返回出來护昧,賦給一個變量魂迄,再打印輸出;代碼如下:
package main
import "fmt"
type Opt struct { //父類結(jié)構(gòu)體,為了方便接口的調(diào)用惋耙,把加法減法放在不同的子類中捣炬;
num1 int
num2 int
}
type Addopt struct { //加法結(jié)構(gòu)體
Opt
}
type Subopt struct { //減法結(jié)構(gòu)體
Opt
}
//定義接口
type Jiekou interface {
Calculate() int
}
//給加減法結(jié)構(gòu)體綁定方法
func (a *Addopt) Calculate() int {
return a.num1 + a.num2
}
func (b *Subopt) Calculate() int {
return b.num1 - b.num2
}
//定義多態(tài)
func poly(jie Jiekou) (value int) {
value = jie.Calculate()
return
}
type factory struct { //工廠的作用就是整合所有的方法,判斷輸入的命令绽榛,并根據(jù)判斷結(jié)果分配不同的方法
}
func (fac *factory) Result(num1 int, num2 int, synbol string) (value int) {
var jie Jiekou //最終還是要通過接口實現(xiàn)方法
//通過接口實現(xiàn)湿酸,必須定義接口變量,不同的接口變量對應(yīng)不同的方法
//接口變量被賦值為能夠?qū)崿F(xiàn)該接口的結(jié)構(gòu)體變量灭美,調(diào)用綁定該結(jié)構(gòu)體的方法
switch synbol { //通過switch給接口變量賦不同的值
case "+":
jie = &Addopt{Opt{num1, num2}}
case "-":
jie = &Subopt{Opt{num1, num2}}
}
value = poly(jie) //利用多態(tài)調(diào)用接口推溃,并輸出返回值
return
} //這是綁定在factory的方法
func main() {
var fac factory
value := fac.Result(12, 23, "+")
fmt.Println(value)
}