DAY 25:Flyweight Pattern,节省空间的好帮手

什麽是 Flyweight Pattern?

将可共用的物件共用以节省空间

问题情境

设计一个扑克牌游戏,如果牌局在运行,每创建一个牌局就需要建立新的卡牌,这样会很浪费记忆体,需要有方法解决此问题。

解决方式

(相关的 code 在Github - go-design-patterns)

设计一个可共用的物件pockerCards{},里头有着所有扑克牌,在用NewPockerGame()开启每场牌局时,程序会设定卡牌的来源都来自pockerCards{}

package main

import "fmt"

var pockerCards = map[int]*Card{
	1: {
		Name:  "A",
		Color: "红",
	},
	2: {
		Name:  "A",
		Color: "黑",
	},
	// 其他卡牌
}

type Card struct {
	Name  string
	Color string
}

type PockerGame struct {
	Cards map[int]*Card
}

func NewPockerGame() *PockerGame {
	board := &PockerGame{Cards: map[int]*Card{}}
	for id := range pockerCards {
		board.Cards[id] = pockerCards[id]
	}
	return board
}

func main() {
	game1 := NewPockerGame()
	game2 := NewPockerGame()
	fmt.Println(game1.Cards[1] == game2.Cards[1])
}

与 Singleton Pattern 的差异

两者都有共用的概念,但有些许差异:

  • Singleton Pattern 在整个系统只会有一个物件
  • Flyweight Pattern 在整个系统可以有多个物件

<<:  RISC-V: R-type 小於指令

>>:  [经典回顾]未知病毒入侵金融业事件纪录

Day3 工业控制系统常见名词

工业控制系统常见名词 基础名词 ICS Industry Control System 工业控制系...

css position

今天介绍position中的四个属性:static、relative、absolute、fixed ...

Day20:今天我们来聊一下如何使用bettercap工具来拦截 HTTP 流量

攻击者可以使用session hijacking来发起各种攻击,例如中间人(MITM)攻击。 在MI...

#0. 前言+环境配置

前言 Hi!我是SingYo,谢谢你点进来看这个系列! 这是我第一次参加铁人赛。 其实说30个前端「...

[Day 8] Reactive Programming - Reactor(FLUX & MONO) Part 2

前言 上一篇介绍了何谓FLUX & MONO,本篇就来说明具体的使用方式。 Just 最简单...