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