經常有人會說,程序員寫代碼要什麼設計模式,随便寫就行,這其實是一種很不好的習慣,就好比蓋房子,不需要設計圖随便蓋就可以,但是想要蓋成高樓大廈,一定要經過嚴謹的設計,不然就容易崩塌。我們采用設計模式來寫代碼,更多的,是為了不坑自己。
今天我們來講一個經典的設計模式,策略模式。
舉個簡單的例子,我們玩RPG遊戲中,玩家都有各式各樣的武器,每個武器攻擊的動畫效果都不一樣,如果我們使用簡單的方式來做,可以寫很多個if或者switch之類的語句,判斷當前的武器是否是斧頭,那麼進行揮砍,判斷當前的武器是否是長槍,那麼刺向敵人,或者是弓箭,進行拉弓操作。并且,有些武器可能還有必殺技,又是一套很多個不同的if語句。
而策略模式,正是為了解決上述問題,策略模式,定義了算法族,并且算法之間可以互相替換。這個設計模式的好處,在于算法的變更獨立于使用算法的人。可能聽起來比較拗口,上述遊戲設計的例子例子中,使用不同的武器,就是不同的算法,如果我們新增一個新的武器,隻要新增新的算法,而去掉一個武器,隻要删除舊的算法。
可能有人會問,這種設計的好處是什麼呢?明明多寫幾個if的事情,為什麼要設計得如此複雜。首先,在遊戲中,除了主角之外,還有很多不同的角色跟怪物,他們也有可能可以使用多種武器,那麼同樣的代碼要出現非常多次,非常的冗餘,而在軟件設計中,代碼冗餘的危害是非常大的,舉個簡單的例子,新增一個武器,就要涉及到非常多處的代碼,稍有不慎,就可能會改漏,帶來故障。
這個是上述例子畫出來的類圖,這種設計模式有什麼好處呢?假如我們新增了一個新的怪物,怪物B,那麼隻要繼承角色這個類,設置他使用的武器,就可以做出攻擊動作了,同樣,假如我們新增一個新的武器,例如機械鍵盤,那麼同樣隻要新建一個機械鍵盤的類,實現武器的接口即可,當我們實現完之後,原有的主角程序員,隻要調用跟換武器為機械鍵盤,便可以使用機械鍵盤去攻擊了!如果我們不适用設計模式,新增一個機械鍵盤作為武器,又要增加多少工作量呢!
總結作為一個程序員,我覺得對寫代碼應該是有追求的,那樣才能夠稱之為一個合格的工程師,隻有這樣,我們才能夠不停的進步。可能有人會說,這個代碼已經這樣了,沒救了,那是否需要加強思考,找到現有的問題,再下一次設計中去解決呢?提升效率的同時又提高了自己的能力!
好了,今天我們就介紹到這裡,再次祝大家中秋快樂。歡迎大家關注我,共同學習,共同進步。大家的支持是我繼續唠嗑的動力。同名公衆号(沙茶敏碎碎念)
,