简单工厂模式

简单工厂模式

咖啡接口

package simpleFactory

type coffer interface{
    addMilk()
    addSugar()
    getName() string
}

咖啡

package simpleFactory

type coffee struct{
    name string
}

中式咖啡

package simpleFactory

type chinaCoffee struct {
    coffee
}

func NewChinaCoffee() *chinaCoffee{
    cof := new(chinaCoffee)
    cof.name = "中式咖啡"
    return cof
}

func (c *chinaCoffee)addMilk(){
    fmt.Println("加入三分之一汤匙牛奶!")
}

func (c *chinaCoffee)addSugar(){
    fmt.Println("加入10克白糖!")
}

func (c *chinaCoffee)getName() string{
    return c.name
}

美式咖啡

package simpleFactory

type americanCoffee struct {
    coffee
}

func NewAmericanCoffee() *americanCoffee{
    cof := new(americanCoffee)
    cof.name = "美式咖啡"
    return cof
}

func (a *americanCoffee)addMilk(){
    fmt.Println("加入一汤匙牛奶!")
}

func (a *americanCoffee)addSugar(){
    fmt.Println("加入20克白糖!")
}

func (a *americanCoffee)getName() string{
    return a.name
}

简单工厂

package simpleFactory

type simpleFactory struct{}

func NewSimpleFactory() *simpleFactory{
    return &simpleFactory{}
}

func (s *simpleFactory)createCoffee(name string) coffer{
    switch name{
        case "china":
        	cof := NewChinaCoffee()
        	cof.addMilk()
        	cof.addSugar()
        	return cof
        case "american":
        	acof := NewAmericanCoffee()
        	acof.addMilk()
        	acof.addSugar()
        	return acof
        default :
        	return nil
    }
}

测试文件

package simpleFactory

func TestSimpleFactory(t *testing.T){
    fac := NewSimpleFactory()
    cof := fac.createCoffee("china")
    fmt.Println(cof.getName)
    cof1 := fac.createCoffee("american")
     fmt.Println(cof1.getName)
}
posted @ 2022-09-08 08:47  理科土拨鼠  阅读(18)  评论(0)    收藏  举报