原型模式
-
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
-
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式
prototype.go
package prototype
type Prototype interface {
Name() string
Value() []int
Clone() Prototype
}
type ProtoStruct struct {
name string
value []int
}
func (p *ProtoStruct) Name() string {
return p.name
}
func (p *ProtoStruct) Value() []int {
return p.value
}
func (p *ProtoStruct) Clone() Prototype {
//newValue := make([]int, len(p.value))
//for index, value := range p.value{
// newValue[index] = value
//}
return &ProtoStruct{name: p.name, value: p.value}
}
prototype_test.go
package prototype
import (
"fmt"
"github.com/stretchr/testify/assert"
"testing"
)
func TestProtoStruct_Clone(t *testing.T) {
p := ProtoStruct{name: "haha", value: []int{1,2,3}}
newP := p.Clone()
p.value = append(p.value, 10)
fmt.Println(p.value)
fmt.Println(newP.Value())
fmt.Println(assert.Equal(t, p.name, newP.Name()))
}