简单工厂模式

2021-06-19  本文已影响0人  简书网abc
package main

import "fmt"

// 动物都有Speak()方法
type Speaker interface {
    Speak()
    SetInfo(name, master string) // 这里调用的实际上是animal类型的方法
}

// 动物
type animal struct {
    name   string
    master string
}

// 给动物设置基本信息
func (a *animal) SetInfo(name, master string) {
    a.name = name
    a.master = master
}

// 具体物种
type dog struct {
    animal
}
func (d *dog) Speak() {
    fmt.Printf("我叫[%v], 我的主人是[%v], 汪汪汪~\n", d.name, d.master)
}

type cat struct {
    animal
}
func (c *cat) Speak() {
    fmt.Printf("我叫[%v], [%v]才不是我的主人呢, 明明是我的铲屎官\n", c.name, c.master)
}

type pig struct {
    animal
}
func (p *pig) Speak() {
    fmt.Printf("我叫[%v], 每天都是[%v]给饭我吃, 我吃饱了就想睡觉\n", p.name, p.master)
}



// 生产动物的工厂
type AnimalFactory struct{}
// 工厂生产动物 简单工厂模式  让工厂来生成我们想要的实际对象,进而对对象进行一系列操作。
func (a AnimalFactory) GetAnimal(animalType string) Speaker {
    var speaker Speaker
    switch animalType {
    case "dog":
        speaker = new(dog)
    case "cat":
        speaker = new(cat)
    case "pig":
        speaker = new(pig)
    }
    return speaker
}




func main() {
    var af AnimalFactory
    var speaker Speaker
    fmt.Printf("%T ==== %+v\n", speaker, speaker)

    speaker = af.GetAnimal("dog")
    speaker.SetInfo("小黑", "张三")
    speaker.Speak()

    speaker = af.GetAnimal("cat")
    speaker.SetInfo("喵呜", "marry")
    speaker.Speak()

    speaker = af.GetAnimal("pig")
    speaker.SetInfo("粉红猪小妹", "猪倌")
    speaker.Speak()

    fmt.Printf("%T ==== %+v", speaker, speaker)
}
上一篇 下一篇

猜你喜欢

热点阅读