Johnny850807 / Coding-GYM

自己菜鳥階段時在練習Java物件導向、設計模式時,所設計的題庫,此專案庫目前用來讓我的同學/學生 (欠調教的) 們提交程式碼來進行Review,欲參考OOP題目者可直接到Projects區觀看,題目皆(85%)擁有示範解答程式碼。ISSUE放的都是Code Review嘴砲。(物件導向設計學分兩階段→JAVA→設計模式)
24 stars 6 forks source link

Template Method : 遊戲容器 #85

Open Johnny850807 opened 7 years ago

Johnny850807 commented 7 years ago

難度:2

走到這你也是寫過不少回合制遊戲了, 是否發現到了,回合制遊戲的生命週期都很類似 ?

如果能撰寫一個 遊戲容器,並匯出成 jar ,那可以節省往後非常多時間。

雖然這題是二轉尾聲了

請撰寫一個遊戲容器,這個容器 能把所有重複的事情做完 (遊戲設置...),並把會變動的遊戲邏輯部分交給子類別處理。

這只是一個範例,看看就好,你想設計得如何自己決定。 activity diagram0

設計好自己的 遊戲容器後,伴隨著上傳 流程圖, 並且用自己寫的遊戲容器實踐一個多人終極密碼即可。

如果你的容器很厲害,開發終極密碼所花費的成本應該極低...

請注意,容器不能直接依賴具體的實踐,不然子類別就會受到拘束。像是你不能直接寫死Player的類型在你的遊戲容器中,因此容器通常伴隨著 泛型

Tip:

  • 如果你有寫過 Android,就知道 Activity 使用 Template Method 的程度非常高。
  • 流程是分得越精越好,擴充性可讀性就越高。
  • 每個流程是可以回傳產物的,這樣子生命週期的連貫性跟可讀性就更高。
  • 在設計時,你必須時時刻刻思考著,這個流程會有邏輯變動嗎 ? 如果會─ 你可以把會變動的部分再分成一個抽象流程,並且給予子類別複寫。
  • 有些流程若覺得可有可無,不想要強迫子類別複寫,或者是想提供預設行為, 則稱之為 hook method,那就不需要宣告為抽象函數
  • 如果你觀察力很好,就知道許多 sdk 都會在抽象樣板函數中,把需要用到的資源傳進去,這樣子類別在複寫時,就不需要回到父類別查看,可讀性極高。
  • 請思考著你的容器如果給另一位開發者使用,他是否可以不受限制地撰寫自己的遊戲邏輯 ?