go设计模式之原型模式
原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。
原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。
一句话,先把对象创建好,而不是每次用的时候重新创建,节省内存消耗。相关go代码如下:
package main
import (
"errors"
"fmt"
)
const (
PROGRAMMING = 1
SOFTWARE = 2
ARCHITECTUR = 3
)
type ProductInfoGetter interface {
GetInfo() string
}
type Book struct {
Page int
Star int
}
func (t Book) GetInfo() string {
return fmt.Sprintf("Page=%d, Star=%d\n", t.Page, t.Star)
}
var cPlusPlus = &Book{600, 5}
var goPL = &Book{300, 5}
var luaPL = &Book{200, 5}
func GetBookClone(t int) (ProductInfoGetter, error) {
switch t {
case PROGRAMMING:
return cPlusPlus, nil
case SOFTWARE:
return goPL, nil
case ARCHITECTUR:
return luaPL, nil
default:
return nil, errors.New(fmt.Sprintf("Prototype id %d not recognized.", t))
}
}
func main() {
produce, err := GetBookClone(PROGRAMMING)
if err == nil {
fmt.Println(produce.GetInfo())
}
produce, err = GetBookClone(SOFTWARE)
if err == nil {
fmt.Println(produce.GetInfo())
}
produce, err = GetBookClone(ARCHITECTUR)
if err == nil {
fmt.Println(produce.GetInfo())
}
}

浙公网安备 33010602011771号