其實(shí)ET主要是ECS的思路蜜另,不過OO的設(shè)計(jì)模式也可以借鑒一些好的啊研。畢竟基于類镇草。
ET將數(shù)據(jù)放在Entity立莉,將方法放在Comoponent和System(擴(kuò)展方法)里的思路對于熱更來說真的是太方便了。
但是在開發(fā)過程中烟很,還是有很多需求變更情況颈墅,(人員變更蜡镶,需求變更,技術(shù)方案重構(gòu))等恤筛,這個(gè)時(shí)候團(tuán)隊(duì)保持思路一致官还,會(huì)帶來很多好處,比如:交接容易毒坛,技術(shù)維護(hù)成本低等望伦。
從今天起要將23個(gè)設(shè)計(jì)模式在ET里邊的應(yīng)用方法和思路抽出來,做一個(gè)系列煎殷,希望能夠和大家多多交流屯伞,說的不對的地方請指正。
開發(fā)環(huán)境:
IDE:VS2017 pro
Unity:Unity 2019.4.29f1 (64-bit)
MongoDB:win32-x86_64-2008plus-ssl-3.4.9
OS:Windows10
UI:FairlyGUI 2021.3.1
先聊聊我理解的設(shè)計(jì)模式的幾大原則:
- 單一職責(zé)
一個(gè)方法一次只做一件事情(做好積木模塊豪直,后面方便組合功能) - 開閉
需要支持在不修改歷史的代碼劣摇,流程的情況下添加新Feature后,不引入新的bug(在ET里邊多見于System方法來擴(kuò)展新功能弓乙,在時(shí)機(jī)項(xiàng)目中末融,很多新手團(tuán)隊(duì)出現(xiàn)的bug反復(fù)問題,來源于沒有遵循這個(gè)原則) - 里氏替換
子類有一切父類的功能(但是在ECS里邊暇韧,我覺得不太適用勾习,畢竟都是通過組件來擴(kuò)展功能) - 依賴倒置
抽象出流程,針對接口編程(例如:ET里邊對流程的生命周期理解非常重要锨咙,OnStart语卤,OnAwake,OnDestroy等待酪刀,需要針對這些“接口”來最好規(guī)劃)
這個(gè)DIP原則粹舵,有一個(gè)比較好理解的例子就是:電腦的USB接口,只要滿足USB的接口方法骂倘,任何電子設(shè)備都可以正常被識(shí)別和接入眼滤。放在ET框架理解:我們要做的框架就是主板,開出很多USB接口历涝,其他人只要根據(jù)我定義的USB接口诅需,那么硬盤,鼠標(biāo)鍵盤荧库,IO等外設(shè)堰塌,都可以接入了。從而實(shí)現(xiàn)拔插功能模塊分衫。從這個(gè)例子知道:我這里定義了一個(gè)抽象的USB接口场刑,外設(shè)的功能千變?nèi)f化,就是針對我定義的抽象接口編程蚪战,你實(shí)現(xiàn)什么功能就是什么外設(shè)牵现。
同樣ET框架也滿足DIP原則铐懊,我這里提問:Game.Scene里邊的接口有哪些,是怎么實(shí)現(xiàn)的瞎疼? - 接口隔離
不要把所有的接口方法都設(shè)置為必須實(shí)現(xiàn)的科乎,這點(diǎn)好理解,比如我寫一個(gè)網(wǎng)絡(luò)接口贼急,你沒必要讓我實(shí)現(xiàn)本地存儲(chǔ)的接口茅茂。 - 最少知識(shí)
我的理解是:高內(nèi)聚低耦合,不要單例滿天飛竿裂,否則后面沒法維護(hù)了玉吁。必須減少類模塊之間的耦合。通過OB模式腻异,等模式來做解耦。
這個(gè)模式也是主程們最喜歡的模式这揣,重構(gòu)大法悔常,只有深刻理解這個(gè)模式,才能往主程走進(jìn)一步给赞。 - 少繼承多組合
我的直觀感受机打,如果違反了這個(gè)原則,那么基于OO編程的最可怕的就在于多重繼承片迅,一旦缺少規(guī)劃和維護(hù)残邀,時(shí)間一長就會(huì)變成一個(gè)特別大而全的類了。
還有一些原則柑蛇,我的理解之所以叫原則芥挣,那就是獨(dú)孤九劍的劍招,只可意會(huì)不可言傳耻台,沒辦法說的非常細(xì)致空免,只能針對具體問題具體分析,也不能為了模式而模式盆耽。只有恰到好處的精妙設(shè)計(jì)蹋砚,不要東施效顰的拙略模仿。這一拳二十年的功夫摄杂,不是一朝一夕能搞出來的坝咐。
針對這些原則和經(jīng)驗(yàn),國外的GOF析恢,提出了的23種設(shè)計(jì)模式墨坚,基本上可以分為三大類:
- 生成模式:產(chǎn)生對象的過程和方式 5個(gè)
工廠,抽象工廠氮昧,單例框杜,構(gòu)造浦楣,原則
- 結(jié)構(gòu)模式:對象之間組合的生命周期 7個(gè)
適配器,外觀咪辱,橋接振劳,裝飾,代理油狂,組合历恐,享元
- 行為模式:數(shù)據(jù)交互或者互動(dòng)的方式 11個(gè)
模板,策略专筷,命令弱贼,中介,觀察磷蛹,迭代吮旅,訪問,責(zé)任鏈味咳,備忘錄庇勃,狀態(tài),解析器
當(dāng)然ET里邊也不是包含了所有的設(shè)計(jì)模式槽驶,里邊的一些常用的就幾種责嚷。
為啥要學(xué)這個(gè):記住 ~ 不要開起袖子就擼,否則永遠(yuǎn)是底層碼農(nóng)掂铐。你寫的代碼罕拂,不要一上來就被主程重構(gòu)了。