PROTOTYPE模式難點解析

2021-10-05 19:21:02 字數 748 閱讀 9407

這個模式在c++中什麼時候才會使用,為什麼不直接new,大家只要明白乙個場景,就會知道它的用處。

比如,現在讓你設計乙個遊戲,一共有8個關卡,每關的小兵有四種,但是第一關的小兵最弱,第八關的小兵最強,你怎麼設計?

你可能認為這還不簡單,需要小兵的時候,直接new乙個相應的小兵,就可以了。但是這樣做會遇見乙個問題,比如第一關的小兵和最後一關的小兵,他們的屬性肯定不一樣,因此,如果直接new,導致的結果就是:每次new乙個例項,都要初始化一次,因為每關的小兵屬性不同,因此,我們不能直接使用new,因為那樣太麻煩了,容易出錯,特別是當每關的小兵數量特別多的時候,因此,最好的辦法,就是每關開始的時候,初始化4個小兵,當需要更多的小兵的時候,只要從4個小兵複製乙個就可以。

以上就是原型模式使用的一種場景。

為了方便客戶端複製操作,我們定義乙個統一的介面e,這個介面e中的主要方法就是clone(),然後令a,b,c,d都繼承e,這樣,客戶端無論要建立哪個小兵,只需要呼叫那個小兵例項的clone方法就行,但是第乙個小兵肯定需要new操作,否則無法建立。

prototype角色

e就是prototype,它定義了統一的自我複製介面,方便客戶端使用。

concreteprototype角色

a,b,c,d就是concreteprototype,它們實現了自我複製介面。

client角色

我們的程式就是client,簡單說就是main函式。

面試疑難點解析

list,set,map,有什麼區別?list和set實際上市實現了collection介面,那麼collection介面的原理你能簡單描述一下嗎?list介面可以插入多個null值,並且重複值,而且list是乙個有序的集合。set是乙個不可重複的集合,裡面的元素都只出現,最多隻出現1次,並且set...

資料庫考研難點解析

這裡介紹一下自己在準備考研複試時對於資料庫這門可的知識點總結,本科期間上課沒聽懂,後來自己經歷考研,把常見的問題難點總結一下 常考知識點 關係代數,連線查詢,巢狀查詢,正規化,模式分解,er圖 資料庫設計 關係代數基本運算包括並,差,笛卡爾積,選擇,投影 傳統集合運算 並,差,交,笛卡爾積 專門關係...

機器視覺系統設計的難點解析

第一 打光的穩定性 工業視覺應用一般分成四大類 定位 測量 檢測和識別,其中測量對光照的穩定性要求最高,因為光照只要發生10 20 的變化,測量結果將可能偏差出1 2個畫素,這不是軟體的問題,這是光照變化,導致了影象上邊緣位置發生了變化,即使再厲害的軟體也解決不了問題,必須從系統設計的角度,排除環境...