享元模式-golang

此篇中主要練習享元模式,具體可以看(http://www.runoob.com/design-pattern/flyweight-pattern.html)


package main

import (
   "fmt"
   "math/rand"
)

func main() {
   color := [...]string{"Red", "Green", "Blue", "White", "Black"}
   for i := 0; i < 20; i++ {
      cir := ShapeFactory2{m: make(map[string]Shape2)}.getCitlce(color[rand.Intn(len(color))]).(Circle2)
      cir.x = rand.Intn(100)
      cir.y = rand.Intn(100)
      cir.radius = rand.Intn(100)
      cir.draw2()

   }
}

type Shape2 interface {
   draw2()
}

type Circle2 struct {
   color  string
   x      int
   y      int
   radius int
}

func (cc Circle2) draw2() {
   fmt.Println(cc)
}

type ShapeFactory2 struct {
   m map[string]Shape2
}

func (sf ShapeFactory2) getCitlce(color string) Shape2 {
   c := sf.m[color]
   if c == nil {
      c = Circle2{color: color}
      sf.m[color] = c
      fmt.Println("Creating circle of color : ", color)
   }
   return c
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章