最近想學設計模式,網上說 HeadFirst 設計模式書挺好的,我來此再鞏固一篇。
故事是這樣的:小明是一個剛畢業的小伙子,他來到了一個遊戲公司實習,項目經理分配了一個實習任務給小明:
設計一個遊戲角色,角色屬性包括(攻擊力,防禦力,敏捷度…等等),以及兩個召喚師技能(閃現和引燃)。
小明想這麼簡單的嗎,如是他用了一天的時間寫好了如下代碼
public class GameRole {
private int atk; // 攻擊力
private int def; // 防禦力
private int dex; // 敏捷度
public void flash_move() {
System.out.println("指定方向瞬移一段距離");
}
public void ignite() {
System.out.println("使其處於燃燒狀態 5 s");
}
}
項目經理看到小明這麼快就完成了任務,表揚了一下小明,小明心裏樂開了花。然後項目經理又布置了一項任務給小明:
再設計兩個角色,他們的召喚師技能分別為(閃現,治療),(閃現,傳送)。
小明心想這難不倒我,然後他仍然只花了一天的時間就寫好了如下代碼:
public class GameRole {
private int atk; // 攻擊力
private int def; // 防禦力
private int dex; // 敏捷度
public void flash_move() {
System.out.println("指定方向瞬移一段距離");
}
public void ignite() {
System.out.println("使附近100碼內隊友恢復30%的血量");
}
}
public class GameRole {
private int atk; // 攻擊力
private int def; // 防禦力
private int dex; // 敏捷度
public void flash_move() {
System.out.println("指定方向瞬移一段距離");
}
public void ignite() {
System.out.println("傳送至己方非英雄單位位置處");
}
}
小明興高采烈的跑去給項目經理看了,項目經理看到小明過來了,心裏覺得這小伙子不錯麻,這麼快就做完了。
然後項目經理便看了他的代碼,這不看不要緊,一看便指着小明罵道:你真是一個糟糕的程序員!!!然後便讓小明改代碼去了。
小明此時還不太明白,我功能都實現了啊,沒啥毛病阿,然後小明不明所以的便問了辦公室的職員,職員告訴他,你代碼冗餘度太高了。
小明一看發現果然如此,然後便花了一天的時間改成如下代碼:
public abstract class GameRole {
private int atk; // 攻擊力
private int def; // 防禦力
private int dex; // 敏捷度
// 省略 Getter and Setter method
public void flash_move() {
System.out.println("指定方向瞬移一段距離");
}
public abstract void skill();
}
public class Role_One extends GameRole {
@Override
public void skill() {
// TODO Auto-generated method stub
System.out.println("使其處於燃燒狀態 5 s");
}
}
public class Role_Two extends GameRole {
@Override
public void skill() {
// TODO Auto-generated method stub
System.out.println("使附近100碼內隊友恢復30%的血量");
}
}
public class Role_Three extends GameRole {
@Override
public void skill() {
// TODO Auto-generated method stub
System.out.println("傳送至己方非英雄單位位置處");
}
}
這次小明覺得冗餘度確實降低了,然後便給項目經理看,項目經理看后覺得確實還行,便又分配了一個任務:
(遊戲用戶希望能自由選擇召喚師技能就好了),所以任務是召喚師技能任意搭配。
小明心想:我寫的這種代碼似乎不用改耶,可以交差了,於是小明便偷懶了两天,然後便上報給項目經理了。
項目經理一看,這代碼沒有變化啊,便問小明,你代碼就這?小明回答是的,然後小明又被罵的狗血淋頭。
不明所以的小明又去問問辦公室的職員,你仔細想想,如果有100個(閃現,引燃),100個(閃現,治療),100個(傳送,治療)呢?
小明突然恍然大悟,那還是有好高的冗餘度啊,經過三天思考後,小明想出了最終答案:
public abstract class GameRole {
private int atk; // 攻擊力
private int def; // 防禦力
private int dex; // 敏捷度
private Skills skill_One;
private Skills skill_Two;
// 省略 Getter and Setter method
}
public class Role_Demo extends GameRole {
}
public interface Skills {
public void skill();
}
public class Flush_Move implements Skills {
@Override
public void skill() {
// TODO Auto-generated method stub
System.out.println("指定方向瞬移一段距離");
}
}
public class Ignite implements Skills {
@Override
public void skill() {
// TODO Auto-generated method stub
System.out.println("使其處於燃燒狀態 5 s");
}
}
public class Treat implements Skills {
@Override
public void skill() {
// TODO Auto-generated method stub
System.out.println("使附近100碼內隊友恢復30%的血量");
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Role_Demo role = new Role_Demo();
role.setSkill_One(new Flush_Move());
role.setSkill_Two(new Ignite());
role.getSkill_One().skill();
role.getSkill_Two().skill();
}
}
小明寫完了,這次小明怕又被罵,便去問問職員小花了,小花說寫的不錯嗎,於是小明膽戰心驚的去交差了。
項目經理看到小明過來,看着小明的囧樣,內心是想笑的,然後看了看代碼發現這回沒啥問題了,便放心的交給它最後一個任務:
給每個英雄添加四個不相同的技能:
小明經過幾次寫代碼的經歷后,一天便寫出來了:
public abstract class GameRole {
private int atk; // 攻擊力
private int def; // 防禦力
private int dex; // 敏捷度
private Skills skill_One;
private Skills skill_Two;
// 省略 Getter and Setter method
public abstract void Skill_One();
public abstract void Skill_Two();
public abstract void Skill_Three();
public abstract void Skill_Four();
}
public class Role_Demo extends GameRole {
@Override
public void Skill_One() {
// TODO Auto-generated method stub
}
@Override
public void Skill_Two() {
// TODO Auto-generated method stub
}
@Override
public void Skill_Three() {
// TODO Auto-generated method stub
}
@Override
public void Skill_Four() {
// TODO Auto-generated method stub
}
}
經過這幾次任務,小明感覺寫的代碼更漂亮,更優雅了,腰也不酸了,背也不疼了。小明上交任務后,項目經理也露出了滿意的笑容!
最後,小明成功通過了實習,然而項目經理給他分配了下一項任務……
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能
※台北網頁設計公司這麼多該如何選擇?
※智慧手機時代的來臨,RWD網頁設計為架站首選
※評比南投搬家公司費用收費行情懶人包大公開
※幫你省時又省力,新北清潔一流服務好口碑
※回頭車貨運收費標準