- package main
- import "fmt"
- /*
- . 定义接口 IPerson, 定义吃喝睡三个抽象方法;
- . 定义一个 IPerson 的实现类 Person, 实现吃喝睡方法;
- . 定义 IWorker 劳动者接口, 拥有劳动方法 Work()(output string) 其中 output 是其工作产出, 和休息方法 REST();
- .IWorker 实现三个不同职业的子类: 程序员 Coder, 老师 Teacher, 农民 Farmer, 并创建一个 Worker 的集合;
- . 程序员, 老师, 农民都有姓名属性, 也都有技能属性;
- . 实现周一到周五全体工作, 如果是周六日程序员工作, 老师休息, 农民吃喝睡;
- */
- type IPerson interface {
- Eat()
- Drink()
- Sleep()
- }
- type IWorker interface {
- //IPerson
- Work()(output string)
- REST()
- }
- type Person struct {
- Name string
- Age int
- }
- func (p *Person)Eat(){
- fmt.Printf("%s 正在吃饭 \ n",p.Name)
- }
- func (p *Person)Drink(){
- fmt.Printf("%s 正在痛饮 \ n",p.Name)
- }
- func (p *Person)Sleep(){
- fmt.Printf("%s 正在睡觉 \ n",p.Name)
- }
- type Worker struct {
- Person
- Skill string
- OutPut string
- Hours int
- Zhicheng string
- }
- func (w *Worker)Work()(output string){
- fmt.Printf("%s 正在 %s, 并将产出 %s\n",w.Name,w.Skill,w.OutPut)
- return w.OutPut
- }
- func (w *Worker)REST(){
- fmt.Printf("%s 正在休息 \ n",w.Name)
- }
- type Coder struct {
- Person
- Worker
- }
- type Teacher struct {
- Person
- Worker
- }
- type Farmer struct {
- Person
- Worker
- }
- func main() {
- workers := make([]IWorker, 0)
- workers = append(workers, &Coder{Person:Person{Name:"比尔"},Worker:Worker{Person:Person{Name:"比尔"},Skill:"撸码艺术",OutPut:"BUG"}})
- workers = append(workers, &Teacher{Person:Person{Name:"杰克马"},Worker:Worker{Person:Person{Name:"杰克马"},Skill:"教书",OutPut:"人才"}})
- workers = append(workers, &Farmer{Person:Person{Name:"隆平哥"},Worker:Worker{Person:Person{Name:"隆平哥"},Skill:"种地",OutPut:"粮食"}})
- for i:=1;i<=7 ;i++ {
- fmt.Printf("今天星期 %d\n",i)
- if i<=5{
- for _,w := range workers{
- w.Work()
- }
- }else {
- /*for _,w := range workers{
- switch w.(type) {
- case *Coder:
- w.Work()
- case *Teacher:
- w.REST()
- case *Farmer:
- farmer := w.(*Farmer)
- farmer.Eat()
- farmer.Drink()
- farmer.Sleep()
- }
- }*/
- for _,w := range workers{
- if coder,ok:=w.(*Coder);ok{
- coder.Work()
- }else if teacher,ok:=w.(*Teacher);ok{
- teacher.REST()
- }else if farm,ok:=w.(*Farmer);ok{
- farm.Eat()
- farm.Drink()
- farm.Sleep()
- }
- }
- }
- fmt.Println()
- }
- }
输出:
今天星期 1
比尔正在撸码艺术, 并将产出 BUG
杰克马正在教书, 并将产出人才
隆平哥正在种地, 并将产出粮食
今天星期 2
比尔正在撸码艺术, 并将产出 BUG
杰克马正在教书, 并将产出人才
隆平哥正在种地, 并将产出粮食
今天星期 3
比尔正在撸码艺术, 并将产出 BUG
杰克马正在教书, 并将产出人才
隆平哥正在种地, 并将产出粮食
今天星期 4
比尔正在撸码艺术, 并将产出 BUG
杰克马正在教书, 并将产出人才
隆平哥正在种地, 并将产出粮食
今天星期 5
比尔正在撸码艺术, 并将产出 BUG
杰克马正在教书, 并将产出人才
隆平哥正在种地, 并将产出粮食
今天星期 6
比尔正在撸码艺术, 并将产出 BUG
杰克马正在休息
隆平哥正在吃饭
隆平哥正在痛饮
隆平哥正在睡觉
今天星期 7
比尔正在撸码艺术, 并将产出 BUG
杰克马正在休息
隆平哥正在吃饭
隆平哥正在痛饮
隆平哥正在睡觉
来源: http://www.bubuko.com/infodetail-3304280.html