[02]Go設計模式:原型模式(Prototype )

原型模式

1、簡介

原型模式(Prototype Pattern)是用於建立重複的對象,同時又能保證性能。這種類型的設計模式屬於建立型模式,它提供了一種建立對象的最佳方式。git

這種模式是實現了一個原型接口,該接口用於建立當前對象的克隆。當直接建立對象的代價比較大時,則採用這種模式。例如,一個對象須要在一個高代價的數據庫操做以後被建立。可能每一個對象有大量相同的數據,這個時候咱們就能夠緩存該對象,在下一個請求時返回它的克隆,僅須要更信部分不一樣的數據,須要的時候更新數據入庫,以此來減小數據庫交互。數據庫

2、代碼實現

先定義一個原型複製的接口設計模式

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設計

3、參考資料:

一、 https://cloud.tencent.com/developer/article/1366818code

相關文章
相關標籤/搜索