赞
踩
接口像是一个公司里面的领导,他会定义一些通用规范,只设计规范,而不实现规范。
go语言的接口,是一种新的类型定义,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。
语法格式和方法非常类似。
/* 定义接口 */ type interface_name interface { method_name1 [return_type] method_name2 [return_type] method_name3 [return_type] ... method_namen [return_type] } /* 定义结构体 */ type struct_name struct { /* variables */ } /* 实现接口方法 */ func (struct_name_variable struct_name) method_name1() [return_type] { /* 方法实现 */ } ... func (struct_name_variable struct_name) method_namen() [return_type] { /* 方法实现*/ }
在接口定义中定义,若干个空方法。这些方法都具有通用性。
下面我定义一个USB接口,有读read和写write两个方法,再定义一个电脑Computer和一个手机Mobile来实现这个接口。
package main import ( "fmt" ) type USB interface { read() write() } type Computer struct { driver_name string } type Mobile struct { driver_name string } func (m Mobile) read() { fmt.Printf("设备名称是,ags read:%v\n", m.driver_name) } func (m Mobile) write() { fmt.Printf("设备名称是,ags write:%v\n", m.driver_name) } func (c Computer) read() { fmt.Printf("设备名称是,ags read:%v\n", c.driver_name) } func (c Computer) write() { fmt.Printf("设备名称是,ags write:%v\n", c.driver_name) } func main() { c := Mobile{"apple"} m := Computer{"lenovo"} c.read() c.write() m.read() m.write() }
输出结果
设备名称是,ags read:apple
设备名称是,ags write:apple
设备名称是,ags read:lenovo
设备名称是,ags write:lenovo
按照上面的例子,我们可以看到,如果我们新增一台平板设备,那么我们需要新增一个平板,在定义他的读写功能,那么ocp是什么?
而面向对象的可复用设计的第一块基石,便是所谓的”开-闭“原则(Open-Closed Principle,常缩写为OCP)。虽然,go不是面向对象语言,但是也可以模拟实现这个原则。对扩展是开放的,对修改是关闭的。
使用ocp设计原则之前的代码扩容平板接口
package main import ( "fmt" ) type USB interface { read() write() } type Computer struct { driver_name string } type Mobile struct { driver_name string } type Pad struct { driver_name string } func (p Pad) read() { fmt.Printf("设备名称是,ags read:%v\n", p.driver_name) } func (p Pad) write() { fmt.Printf("设备名称是,ags write:%v\n", p.driver_name) } func (m Mobile) read() { fmt.Printf("设备名称是,ags read:%v\n", m.driver_name) } func (m Mobile) write() { fmt.Printf("设备名称是,ags write:%v\n", m.driver_name) } func (c Computer) read() { fmt.Printf("设备名称是,ags read:%v\n", c.driver_name) } func (c Computer) write() { fmt.Printf("设备名称是,ags write:%v\n", c.driver_name) } func main() { c := Mobile{"apple"} m := Computer{"lenovo"} p := Pad{"apple"} p.read() p.write() c.read() c.write() m.read() m.write() }
使用ocp思想之后设计
package main import ( "fmt" ) type USB interface { read() write() } type Computer struct { driver_name string } type Mobile struct { driver_name string } type Pad struct { driver_name string } func (p Pad) read() { fmt.Printf("设备名称是,ags read:%v\n", p.driver_name) } func (p Pad) write() { fmt.Printf("设备名称是,ags write:%v\n", p.driver_name) } func (m Mobile) read() { fmt.Printf("设备名称是,ags read:%v\n", m.driver_name) } func (m Mobile) write() { fmt.Printf("设备名称是,ags write:%v\n", m.driver_name) } func (c Computer) read() { fmt.Printf("设备名称是,ags read:%v\n", c.driver_name) } func (c Computer) write() { fmt.Printf("设备名称是,ags write:%v\n", c.driver_name) } type Person struct { } func (person Person) care(u USB) { u.read() u.write() } func main() { Computer := Computer{"lenovo"} Mobile := Mobile{"lenovo"} Pad := Pad{"xiaomi"} Person := Person{} Person.care(Computer) Person.care(Mobile) Person.care(Pad) }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。