說到裝飾,不由要說到女性。
去年過年回家給我媽買了周大福項鏈,很明顯就感覺待遇就不一樣了,即使這樣,還是被一個阿姨說應該買更重點的。看來錢這種東西果然是多一點才好。雖然自己無所謂,但讓家里人更開心也是一種幸福啊。女朋友也很喜歡手鏈什么的,戴上手鏈氣質的確會感覺挺不同的,我覺得這世界基本沒有女生不喜歡身上裝飾個神馬的。
裝飾不是衣服,也不會影響自己本來的搭配,它是一種在原本基礎上錦上添花卻不會影響原本結構的東西。
言歸正傳,假若你有個女朋友叫WPF,她有自己喜歡的搭配,當你追到她的時候她已經搭配好自己了,怎樣才能在不改變她的同時加深下她的氣質呢,那就需要鑽石,項鏈。。Adorner。很突兀對么。其實Adorner和裝飾物性質一樣,需要一些努力(用時間來學習=金錢)之后就能取悅自己的女朋友了。
當你需要一個懸浮物不影響自己本來UI的建設,當你需要一個可以跟隨你一個控件點擊產生的跟隨UI(比如點擊一個按鈕就在旁邊出現一個小框,蓋住之前UI的那種),當你需要一個可以定義為裝飾而不是骨架的話,那就請使用裝飾者模式。裝飾模式是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。關於它的定義這里我就不概述了。鏈接直接給上http://baike.baidu.com/link?url=_c_YDD4bZSkpem21xAz6qTwU2HYHLxF2PBWFKQx7oGCIPnx2DUzq-KIU8Ni3h2alqYsZN8VY6pGDZkOZi84rZK
而在WPF中,最常用到的便是Adorner了。
在這里我便不贅述如何使用了,我會在最后給上鏈接,畢竟很多人寫過,我希望我能做到的是能夠把這個理念敘述清楚,而並不只是貼代碼,授人以魚不如授人以理念。
Adorner機制我覺得比較相似於上海晾衣服。上海是個很奇葩的城市,尤其是晾衣服。都是那種一根棍子串很多搭在外面架子上,我住在四樓,每次都戰戰兢兢。其實Adorner也類似,要曬的衣物便是Adorner里裝的元素,衣服那根棍子是AdornerLayer,架子則是AdornerDecorator。
自己寫好的元素裝進Adorner里,用AdornerLayer串好,搭在AdornerDecorator的架子上。便是整個Adorner的實現。
自己感覺這里就結束還蠻突兀的,但實際上也就是那么簡單。解耦和,分成各個功能模塊,然后再組合在一起工作,這種方式着實令人着迷,也非常容易理解。
具體的使用方法和解釋下面我就貼上來吧,站在巨人肩膀上才能更偉大,謝謝軟件這個行業善於分享帶來的世界的善意。
概念:http://www.cnblogs.com/loveis715/archive/2012/03/31/2427734.html
結構圖:http://www.cnblogs.com/lusonixs/articles/1588859.html
CodeProject精品例子:http://www.codeproject.com/Articles/54472/Defining-WPF-Adorners-in-XAML
http://www.codeproject.com/Articles/709266/Design-Adorners-in-XAML-with-Data-Binding-Support
http://www.codeproject.com/Articles/72544/Editable-Text-Block-in-WPF