GO面向对象综合练习-计算器实现
本段代码是我编写的案例 参照案例2
package main import "fmt" //面向对象接口练习 type JiSuan interface { Result() int } //工厂类 type Fact struct { } type Fulei struct { num1 int num2 int } type Add struct { Fulei } func (a *Add) Result() int { return a.num1+a.num2 } //多态实现 func Result(o JiSuan){ value := o.Result() fmt.Println(value) } //工厂实现 func (f *Fact) Result(num1 int, num2 int,ff string) { if ff == "+" { var a Add a.num1 = num1 a.num2 = num2 Result(&a) } } func main() { //工厂方法调取 var f Fact f.Result(10,20,"+") //多态调取 //a := Add{Fulei{10,20}} //Result(&a) //单独调取 //a := Add{Fulei{10,20}} //res := a.Result() //fmt.Println(res) //使用接口 // var o JiSuan // a := Add{Fulei{10,20}} // o = &a // res := o.Result() // fmt.Println(res) }
模块之间结构更紧凑 如果变成多文件 更模块化 使用更便捷
案例2
package main import "fmt" //定义接口 type Opter interface { //方法声明 Result() int } //父类 type Operate struct { num1 int num2 int } //加法子类 type Add struct { Operate } //减法子类 type Sub struct { Operate } //乘法子类 type Mlt struct { Operate } //工厂类 type Factory struct { } //加法子类的方法 func (a *Add) Result() int { return a.num1 + a.num2 } //减法子类的方法 func (s *Sub) Result() int { return s.num1 - s.num2 } //乘法子类的方法 func (m *Mlt) Result() int { return m.num1 * m.num2 } //多态实现 func Result(o Opter) { value := o.Result() fmt.Println(value) } func (f *Factory) Result(num1 int, num2 int, ch string) { switch ch { case "+": var a Add a.num1 = num1 a.num2 = num2 Result(&a) case "-": var s Sub s.num1 = num1 s.num2 = num2 Result(&s) case "*": var m Mlt m.num1 = num1 m.num2 = num2 Result(&m) } } //通过设计模式调用 func main() { //创建工厂对象 var f Factory f.Result(10, 20, "*") } //多态调用 func main0203() { //var a Add = Add{Operate{10, 20}} var s Sub = Sub{Operate{10, 20}} Result(&s) } //接口调用 func main0202() { var o Opter var a Add = Add{Operate{10, 20}} o = &a value := o.Result() fmt.Println(value) } //方法调用 func main0201() { //创建加法对象 //var a Add //a.num1 = 10 //a.num2 = 20 //v := a.Result() //fmt.Println(v) //创建减法对象 var s Sub s.num1 = 10 s.num2 = 20 v := s.Result() fmt.Println(v) }