go 简单工厂模式

这篇博主讲的很清晰 https://www.jianshu.com/p/95e64cc56fd9
多态实现如下:

//main.go文件
package main

import (
	"fmt"
	"time"
)

//翻译接口

type Translator interface {

	Translate(string) string

}

//德语翻译类

type GermanTranslator struct{}

func (*GermanTranslator) Translate(words string) string {

	return "德语"

}

//英语翻译类

type EnglishTranslator struct{}

func (*EnglishTranslator) Translate(words string) string {

	return "英语"

}

//日语翻译类

type JapaneseTranslator struct{}

func (*JapaneseTranslator) Translate(words string) string {

	return "日语"

}



func main() {

	defer func() {

		if err := recover(); err != nil {

			fmt.Println(err)

		}

		time.Sleep(3 * time.Second)

	}()

	var lan int

	fmt.Printf("%s\r\n%s\r\n", "以下是可翻译的语言种类,请输入代表数字", "1:德语、2:英语、3:日语")

	fmt.Scanln(&lan)

	fmt.Println("请输入要翻译成中文的文本:")

	var inputWords string

	fmt.Scanln(&inputWords)

	var translator Translator

	//根据不同的语言种类,实例化不同的翻译类

	switch lan {

	case 1:

		translator = new(GermanTranslator)

	case 2:

		translator = new(EnglishTranslator)

	case 3:

		translator = new(JapaneseTranslator)

	default:

		panic("no such translator")

	}

	fmt.Println(translator.Translate(inputWords))

}

简单工厂模式(Simple Factory Pattern)

又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

作者:AprilBoy
链接:https://www.jianshu.com/p/95e64cc56fd9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

//main.go文件
package main

import (
	"fmt"
	"time"
)

//翻译接口

type Translator interface {

	Translate(string) string

}

//德语翻译类

type GermanTranslator struct{}

func (*GermanTranslator) Translate(words string) string {

	return "德语"

}

//英语翻译类

type EnglishTranslator struct{}

func (*EnglishTranslator) Translate(words string) string {

	return "英语"

}

//日语翻译类

type JapaneseTranslator struct{}

func (*JapaneseTranslator) Translate(words string) string {

	return "日语"

}



func Create(lan int) Translator {

	var translator Translator

	//根据不同的语言种类,实例化不同的翻译类

	switch lan {

	case 1:

		translator = new(GermanTranslator)

	case 2:

		translator = new(EnglishTranslator)

	case 3:

		translator = new(JapaneseTranslator)

	default:

		panic("no such translator")

	}

	return translator

}

//func main() {
//
//	defer func() {
//
//		if err := recover(); err != nil {
//
//			fmt.Println(err)
//
//		}
//
//		time.Sleep(3 * time.Second)
//
//	}()
//
//	var lan int
//
//	fmt.Printf("%s\r\n%s\r\n", "以下是可翻译的语言种类,请输入代表数字", "1:德语、2:英语、3:日语")
//
//	fmt.Scanln(&lan)
//
//	fmt.Println("请输入要翻译成中文的文本:")
//
//	var inputWords string
//
//	fmt.Scanln(&inputWords)
//
//	var translator Translator
//
//	//根据不同的语言种类,实例化不同的翻译类
//
//	switch lan {
//
//	case 1:
//
//		translator = new(GermanTranslator)
//
//	case 2:
//
//		translator = new(EnglishTranslator)
//
//	case 3:
//
//		translator = new(JapaneseTranslator)
//
//	default:
//
//		panic("no such translator")
//
//	}
//
//	fmt.Println(translator.Translate(inputWords))
//
//}

func main() {

	defer func() {

		if err := recover(); err != nil {

			fmt.Println(err)

		}

		time.Sleep(3 * time.Second)

	}()

	var lan int

	fmt.Printf("%s\r\n%s\r\n", "以下是可翻译的语言种类,请输入代表数字", "1:德语、2:英语、3:日语")

	fmt.Scanln(&lan)

	fmt.Println("请输入要翻译成中文的文本:")

	var inputWords string

	fmt.Scanln(&inputWords)

	//客户端只关注如何获取翻译类,而不用关注创建翻译类的细节

	translator:=Create(lan)

	fmt.Println(translator.Translate(inputWords))

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值