golang 디자인 모드

11886 단어 golang
4. 567917. 단일 모델 의 단일 모델 은 비교적 자주 사용 하 는 모델 이다. 예 를 들 어 config 도 구 를 구축 하 는 것 이다. 우 리 는 config 를 읽 고 쓰 는 대상 만 필요 하 다.golang 에서 sysnc. Once 는 단일 모드 를 실현 하 는 데 적합 합 니 다
type config map[string]string

var (
	once sync.Once
	instance config
)

func Config() {
	//               Do  
	once.Do(func(){
		instance = make(config)
	})
	return instance
}


4. 567917. 대상 풀 대상 풀 은 여러 개의 인 스 턴 스 를 유지 하 는 데 사용 된다.일반적으로 대상 의 새로운 원가 가 높 은 장면 을 처리 하 는데 사용 된다. 예 를 들 어 데이터 뱅 크 의 연결, 바 텀 에 대상 탱크 가 존재 할 것 이다.하나의 간단 한 실현 은 channel 로 연못 을 모 의 한 것 입 니 다. 그 중에서 대상 의 인 스 턴 스 를 꺼 내 서 다 쓴 후에 다시 넣 는 것 입 니 다
type Pool chan *Object

func New(total int) *Pool{
	p := make(Pool.total)

	for i := 0;i<total;i++{
		p <= new(Object)
	}
	return &p
}
// usage
p := New(2)
obj  p
// do someting
p  obj

4. 567917. 공장 모델 은 통속 적 으로 말 하면 공장 모델 은 생산 라인 만 제공 하고 마지막 에 나 온 것 은 네가 준 원료 에 따라 다 르 기 때문에 사례 의 구체 적 인 실현 을 지연 시 켰 다
type StorageType int

const (
    DiskStorage StorageType = 1 << iota
    TempStorage
    MemoryStorage
)

func NewStore(t StorageType) Store {
    switch t {
    case MemoryStorage:
        return newMemoryStorage( /*...*/ )
    case DiskStorage:
        return newDiskStorage( /*...*/ )
    default:
        return newTempStorage( /*...*/ )
    }
}

// userage

s, _ := data.NewStore(data.MemoryStorage)
f, _ := s.Open("file")

n, _ := f.Write([]byte("data"))
defer f.Close()

4. 567917. 공장 모델 과 비슷 한 것 은 건축 자 모델 이 고 건축 자 모델 을 생산 라인 으로 이해 할 수 있 지만 이 생산 라인 의 중심 은 여러 가지 원료 간 의 조합 관계 이다

type Speed float64

const (
    MPH Speed = 1
    KPH       = 1.60934
)

type Color string

const (
    BlueColor  Color = "blue"
    GreenColor       = "green"
    RedColor         = "red"
)

type Wheels string

const (
    SportsWheels Wheels = "sports"
    SteelWheels         = "steel"
)

type Builder interface {
    Color(Color) Builder
    Wheels(Wheels) Builder
    TopSpeed(Speed) Builder
    Build() Interface
}

type Interface interface {
    Drive() error
    Stop() error
}
// useage

assembly := car.NewBuilder().Paint(car.RedColor)

familyCar := assembly.Wheels(car.SportsWheels).TopSpeed(50 * car.MPH).Build()
familyCar.Drive()

sportsCar := assembly.Wheels(car.SteelWheels).TopSpeed(150 * car.MPH).Build()
sportsCar.Drive()

좋은 웹페이지 즐겨찾기