學習日記之享元模式和Effective C

2021-09-08 12:47:14 字數 1183 閱讀 3592

享元模式(flyweight):運用共享技術有效地支援大量細粒度的物件。

(1),享元模式能夠避免大量很相似的開銷。在程式設計中,有時須要生成大量細粒度的類例項來表示資料。假設能發現這些例項除了幾個引數外基本上都是同樣的。有時就能大幅度地降低須要例項化的類的數量。假設能把這些引數移到類的外面,在方法呼叫時將他們傳遞進來,就能夠通過共享大幅度降低例項的數目。

(2)。假設乙個應用使用了大量的物件。而這些物件造成非常大的儲存開銷的時候就考慮使用。還有就是物件的大多數狀態能夠外部狀態,假設刪除物件的外部狀態,那麼能夠用相對較少的共享物件代替非常多組物件。

effective c++:

1:請使用 traits classes 表現型別資訊

(1)。traints classes 使得「型別相關資訊」在編譯器可用。他們以 templates 和 「templates 特化」完畢實現。

(2),整合過載技術(voerloading)後。traits classes 有可能在編譯器對型別執行 if...else 測試。

2:認識 template 元程式設計

(1),template metaprogramming(tmp。模板元程式設計)可將工作由執行期移往編譯期,由於能夠實現早期錯誤偵測和更高的執行效率。

(2)。tmp 可被用來生成「基於政策選擇組合」(based on combinations of policy choices)的客戶定製**。也可用來避免生成對某些特殊型別並不適合的**。

今日工作問題:

對於qmainwindow視窗,在show 。resize 時候。系統會在重繪前將原來的背景使用系統預設背景色擦除,假設系統預設背景色和當前視窗背景色不同,那麼就會有閃爍現象。

探索1:使用setsyscolor將系統背景色改為視窗背景色                                結論:setsyscolor會改變系統所以視窗背景色,失敗。

探索2:使用qt自帶雙緩衝,設定window attribute 為qt::wa_opaquepaintevent或者 qt::wa_nosystembackground    結論:對背景閃爍問題沒有作用

期望:1.希望能夠通過跟蹤源**,找到詳細系統繪製原理。解決閃爍問題。

2.通過改變某個視窗的背景色,禁用系統預設背景色繪製或者擦除操作解決閃爍問題。

設計模式之享元模式學習筆記

享元模式是池技術 string常量池 資料庫連線池 緩衝池等 的重要實現方式,可以減少應用程式建立物件,降低程式記憶體的占用,提高效能。使用共享物件,有效的大量細粒度的物件 1.flyweight 抽象享元角色,同時定義出物件的外部和內部狀態的介面或實現 2.concreteflyweight 具體...

設計模式學習之十 享元模式

flyweight pattern 蠅量模式 運用共享技術有效地支援大量細粒度得物件 常用於系統底層開發,解決系統得效能問題,例如 資料庫連線池,裡面都是建立好得連線物件,在這些連線物件有我們需要得則直接拿過來用,避免重複建立 享元模式能夠解決重複物件得記憶體浪費得問題,當系統中有大量相似物件,需要...

設計模式之享元模式

1 享元模式運用共享技術有效地支援大量細粒度的物件。uml圖如下 2 思考 flyweight根據客戶需求返回已經生成好的物件,但一定要事先生成物件例項嗎?答 實際上是不一定需要的,完全可以初始化的時候什麼也不做,到需要的時候,再去判斷物件是否為null來決定是否例項化。3 思考 為什麼要有unsh...