デザインパターン言語を行くフライ級(フライ級)

flyweight.go

フライパッケージ

インポート(
	"時間" 

CONST(
	TEAM_A = "A" 
	TEAB_B = "B" 

タイプのチーム構造体{ 
	UINT64 ID 
	名ストリング
	]バイトシールド[ 
	プレーヤー[]プレーヤー
	HistoricalData [] HistoricalData 
} 

型プレーヤーのstruct { 
	名文字列
	姓列を
	PerviousTeam uint64型
	フォト[]バイト
} 

HistoricalData構造体{入力
	年のuint8 
	LeagueResults []マッチ
} 

{マッチ構造体を入力
	日time.Time 
	VisitorID UINT64
	ローカルID UINT64 
	LocalScoreバイト
	VisitorScoreバイト
	LocalShoots uint16の
	VisitorShoots uint16の
} 

種類teamFlyweightFactory構造体{ 
	createdTeams地図[ストリング] *チーム
} 

FUNC(T * teamFlyweightFactory)GetTeam(teamID列)*チーム{ 
	t.createdTeamsなら[teamID]!=ゼロ{ 
		戻りT .createdTeams [teamID] 
	} 

	チーム:= getTeamFactory(teamID)
	t.createdTeams [teamID] =&チーム
	戻りt.createdTeams [teamID] 
} 

getTeamFactory(チーム列)チーム{FUNC 
	スイッチチーム{ 
	ケースTEAB_B:
		リターンチーム{ 
			ID:2、
			名前:TEAB_B、
		} 
	デフォルト:
		戻りチーム{  
			ID:1、
			名:TEAM_A、
		} 
	} 
} 

FUNC(T * teamFlyweightFactory)GetNumberOfObjects()INT { 
	リターンでlen(t.createdTeams)
} 

FUNC NewTeamFactory()teamFlyweightFactory { 
	戻りteamFlyweightFactory { 
		createdTeams:メイク(マップ[ストリング] *チーム)
	} 
}

  

flyweight_test.go

フライパッケージ

インポート(
	"FMT" 
	""テスト

TestTeamFlyweightFactory_GetTeam(T * testing.T){funcを
	:= NewTeamFactory()工場

	= factory.GetTeam(TEAM_A):teamA1 
	teamA1 ==ゼロ{場合
		にポインタt.Error( " TEAM_Aはゼロ")であった
	} 
	:= factory.GetTeam(TEAM_A)teamA2 
	場合teamA2 ==ゼロ{ 
		")TEAM_Aたゼロへのポインタt.Error( " 
	} 

	!teamA1 = teamA2 {場合
		TEAM_Aポインタt.Error(" ")と同じではなかった
	} 

	!factory.GetNumberOfObjects()= 1 {場合に
		作成されたオブジェクトの数が1でなかったt.Errorf(" %dの\ n」は、工場。GetNumberOfObjects()) 
	} 

}

Test_HighVolume(T * testing.T){FUNC 
	= NewTeamFactory():工場
	チーム:=メイク([] *チーム* 2 5000)
	iについて:= 0; I <5000; I ++ { 
		チーム[I] = factory.GetTeam(TEAM_A)
	} 
	iについて:= 5000; I <* 5000 2。I ++ { 
		チーム[I] = factory.GetTeam(TEAB_B)
	} 

	!factory.GetNumberOfObjects IF()= 2 { 
		t.Errorf( "作成されたオブジェクトの数が2ではありませんでした:%d \ n"は、factory.GetNumberOfObjects())
	} 

	iについて:= 0; I <3。I ++ { 
		fmt.Printf( "%pに対するポインタ%のD点と%Pに配置されている\ n"は、I、チーム[i]は、&チーム[I])
	} 
}

  

 

おすすめ

転載: www.cnblogs.com/aguncn/p/11900482.html