[02] Go 디자인 모델: 원형 모델 (Prototype)

1913 단어
목차
원형 모델
소개
코드 구현
참고 자료

원형 모드
프로필
프로 토 타 입 모드 (Prototype Pattern) 는 중복 되 는 대상 을 만 드 는 동시에 성능 도 보장 합 니 다.이런 유형의 디자인 모델 은 창설 형 모델 에 속 하 는데, 이것 은 창설 대상 을 만 드 는 가장 좋 은 방법 을 제공한다.
이 모드 는 현재 대상 의 복 제 를 만 드 는 데 사용 되 는 프로 토 타 입 인 터 페 이 스 를 실현 합 니 다.대상 을 직접 만 드 는 대가 가 비교적 클 때 이런 모델 을 사용한다.예 를 들 어 대상 은 높 은 대가 의 데이터 베 이 스 를 조작 한 후에 만들어 져 야 한다.모든 대상 이 같은 데 이 터 를 대량으로 가지 고 있 을 수 있 습 니 다. 이 럴 때 우 리 는 이 대상 을 캐 시 할 수 있 습 니 다. 다음 요청 시 복 제 를 되 돌려 줄 수 있 습 니 다. 일부 다른 데 이 터 를 더 믿 고 필요 할 때 데 이 터 를 입고 하여 데이터 베 이 스 를 줄 일 수 있 습 니 다.
코드 구현
원형 복사 인 터 페 이 스 를 먼저 정의 합 니 다.
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. 참고 자료:
1、 https://cloud.tencent.com/developer/article/1366818

좋은 웹페이지 즐겨찾기