原型模式(Prototype Pattern)是用於建立重複的對象,同時又能保證性能。這種類型的設計模式屬於建立型模式,它提供了一種建立對象的最佳方式。git
這種模式是實現了一個原型接口,該接口用於建立當前對象的克隆。當直接建立對象的代價比較大時,則採用這種模式。例如,一個對象須要在一個高代價的數據庫操做以後被建立。可能每一個對象有大量相同的數據,這個時候咱們就能夠緩存該對象,在下一個請求時返回它的克隆,僅須要更信部分不一樣的數據,須要的時候更新數據入庫,以此來減小數據庫交互。數據庫
先定義一個原型複製的接口設計模式
type Cloneable interface { Clone() Cloneable }
實現Clone函數緩存
type Person struct { name string age int height int } func (p *Person) Clone() Cloneable { person := *p return &person } func(p *Person) SetName(name string) { p.Name = name } func(p *Person) SetAge(age int) { p.Age = age }
來看完整代碼實現函數
package main import "fmt" type Cloneable interface { Clone() Cloneable } type Person struct { Name string Age int Height int } func (p *Person) Clone() *Person { person := *p return &person } func(p *Person) SetName(name string) { p.Name = name } func(p *Person) SetAge(age int) { p.Age = age } func main() { p := &Person{ Name: "zhang san", Age: 20, Height: 175, } p1 :=p.Clone() p1.SetAge(30) p1.SetName("Li Si") fmt.Println("name:", p1.Name) fmt.Println("age:", p1.Age) fmt.Println("height:", p1.Height) }
輸出結果:性能
name: Li si age: 30 height: 175
完整代碼地址:https://gitee.com/ncuzhangben/GoStudy/tree/master/go-design-pattern/02-Prototype設計