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]) } }