裝飾模式
前幾年學習設計模式的時候,看著別人的分析覺得挺有道理,也能懂
就是自己來的時候,根本無從下手,看著分析出來的代碼,也不難
可是最缺乏的就是代碼分析的能力,怎麽根據實際的業務把代碼很巧妙的拆開
並用合適的方式來實現,沒有一定的功力確實是難度不小,又不能為了用模式而用模式
而是真正需要的時候,才去用
大話設計模式的特點,就是從自然的生活入手,怎麽得出符合要求的代碼
每一個場景,都是生活上的一些事情,就可以聯系到一些設計模式
讓小菜(代表了大多數)這個看似很菜的程序員,先寫出一般什麽也不怎麽考慮
也就是並沒有仔細考慮六大原則(單一職責原則 裏氏替換原則 依賴倒置原則 接口隔離原則
然後有老鳥針對於這個第一版代碼,提出刁鉆的需求變化,再講述一些設計原則
小菜有了新的理解,再去寫出第二版,直到寫出滿意的為止
在這個過程中就是我們常見的產品實際的開發過程,甚至開發過程比這個還要差
在這個過程中正常思維寫出的代碼,與經過思考運用六大原則寫出的代碼
優缺點對比很明顯就能顯示出來,以下以裝飾模式為切入點
看看老鳥是怎麽想的,小菜是怎麽想的 作者是怎麽想的
事情的起源,也就是需求來源於小菜要去見夢中情人,不知道該怎麽穿衣服了
老鳥故意問,看你是什麽風格了,穿什麽衣服可選的方式太多,順序,大小,反正這都沒有明確規定不能穿
老鳥第一反應是設計模式,根據小菜的穿衣服,讓小菜寫個穿衣系統
作者看到這個會想到怎麽直接用更好的方式,六大原則給寫出來
結果想來想去,卻不知道如何下手,還得看書他們怎麽實現的
小菜不思考,直接就寫,我是人嘛,人穿衣服,那穿衣服,穿褲子,穿鞋子等等
都屬於方法,幹脆就來個
也就都屬於人的方法,直接來個最直接,最簡單,用老鳥的話說,能表現需要,最不符合面向對象的方式實現了一版
老鳥立馬,針對這種實現,提出了一類奇葩需求,我要是超人打扮怎麽扮
小菜一想,這得改人這個裏面的代碼了,違背了開閉原則
立馬寫了第二版,將人與衣服分離開來,這些變化都是在原來的基礎上
構建而來,先有了一個符合客戶的功能實現,當客戶提出新的需要,發現原有的功能滿足不了了,就得去改原來的代碼,多次修改,代碼越來越好,好的代碼都是重構出來的
第二版類圖
老鳥一看雖然人與服飾分離,但一看客戶端的調用
針對於不同的穿衣順序,會有不同的效果,對象分離就是面向對象了?
引出了裝飾模式的特點
結構圖:
小菜看了裝飾模式之後,明白了,並針對於裝飾的特點,提出自己對裝飾模式的理解
小菜在學習了裝飾模式之後,又寫了出了第三版代碼
將飾模式總結:
裝飾模式是為已有功能動態地添加更多功能的一種方式,到底怎麽用?
裝飾模式