工厂模式之简单工厂(golang实现)

  由于最近在学习golang,就想着把golang的设计模式也重温一下,当然设计模式是面向对象思想的传承,是一套被反复使用、多数人知晓的,并不限于使用何种语言来实现。

  从这里开启golang的设计之旅吧~

  go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。
  NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。

 

 

  还是以造手机为例子:

  

package simpleFactory

import (
	log "github.com/sirupsen/logrus"
)

//定义一个phone接口
type Phone interface {
	Call() ;
}

//定义创建手机的函数
func NewPhone(t int) Phone{
	if t==1{
		return &apple{}
	} else if t==2{
		return &huawei{}
	}else if t==3{
		return &xiaomi{}
	}
	return nil
}

//type1
type apple struct{
}
//实现call方法
func (*apple) Call() {
	log.Info("我是苹果手机,我可以打电话")
}


//type2
type huawei struct {
}

//实现call方法
func (*huawei) Call() {
	log.Info("我是华为手机,我可以打电话")
}

//type3
type xiaomi struct {
}

//实现call方法
func (*xiaomi) Call() {
	log.Info("我是小米手机,我可以打电话")
}

  

 客户端测试代码如下:

package simpleFactory

import (
	log "github.com/sirupsen/logrus"
)

//定义一个phone接口
type Phone interface {
	Call() ;
}

//定义创建手机的函数
func NewPhone(t int) Phone{
	if t==1{
		return &apple{}
	} else if t==2{
		return &huawei{}
	}else if t==3{
		return &xiaomi{}
	}
	return nil
}

//type1
type apple struct{
}
//实现call方法
func (*apple) Call() {
	log.Info("我是苹果手机,我可以打电话")
}


//type2
type huawei struct {
}

//实现call方法
func (*huawei) Call() {
	log.Info("我是华为手机,我可以打电话")
}

//type3
type xiaomi struct {
}

//实现call方法
func (*xiaomi) Call() {
	log.Info("我是小米手机,我可以打电话")
}

  

  测试结果:

 

posted @ 2022-02-08 11:16  梦里藏梦、  阅读(179)  评论(0)    收藏  举报