这篇博主讲的很清晰 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))
}