프로토 타입 모드
I. 서론
원형 모형 (원형 패턴) 성능을 확보하면서, 대상물의 복제본을 생성하는 데 사용된다. 디자인 패턴이 유형의 개체를 만들 수있는 가장 좋은 방법을 제공 스키마를 만들 속한다.
이 모델은 인터페이스의 복제를 위해 만든 현재 객체의 프로토 타입 인터페이스를 구현됩니다. 때이 모델을 사용하여, 상대적으로 대형의 객체를 생성하는 직접 비용. 데이터베이스 비싼 작업 후, 예를 들어, 객체가 생성 될 필요가있다. 업데이트 데이터 저장 데이터베이스를 줄이기 위해 필요할 때 동일한 데이터의 큰 숫자를 할 수 있습니다 각 개체, 우리가 객체를 캐시 할 수있는이 시간, 그것은, 요청 클론 만 이상의 서로 다른 데이터 통신 수단을 필요로 다음 시간을 반환 상호 작용.
둘째, 코드 구현
프로토 타입 복사본의 인터페이스를 정의하려면
type Cloneable interface {
Clone() Cloneable
}
복제 기능을 달성
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