1. 程式人生 > >裝飾模式

裝飾模式

設計原則 表現 模式 開閉 可選 nbsp 學習 裝飾 基礎

前幾年學習設計模式的時候,看著別人的分析覺得挺有道理,也能懂

就是自己來的時候,根本無從下手,看著分析出來的代碼,也不難

可是最缺乏的就是代碼分析的能力,怎麽根據實際的業務把代碼很巧妙的拆開

並用合適的方式來實現,沒有一定的功力確實是難度不小,又不能為了用模式而用模式

而是真正需要的時候,才去用

大話設計模式的特點,就是從自然的生活入手,怎麽得出符合要求的代碼

每一個場景,都是生活上的一些事情,就可以聯系到一些設計模式

讓小菜(代表了大多數)這個看似很菜的程序員,先寫出一般什麽也不怎麽考慮

也就是並沒有仔細考慮六大原則(單一職責原則 裏氏替換原則 依賴倒置原則 接口隔離原則

迪米特法則 開閉原則 )的第一版代碼

然後有老鳥針對於這個第一版代碼,提出刁鉆的需求變化,再講述一些設計原則

小菜有了新的理解,再去寫出第二版,直到寫出滿意的為止

在這個過程中就是我們常見的產品實際的開發過程,甚至開發過程比這個還要差

在這個過程中正常思維寫出的代碼,與經過思考運用六大原則寫出的代碼

優缺點對比很明顯就能顯示出來,以下以裝飾模式為切入點

看看老鳥是怎麽想的,小菜是怎麽想的 作者是怎麽想的

事情的起源,也就是需求來源於小菜要去見夢中情人,不知道該怎麽穿衣服了

老鳥故意問,看你是什麽風格了,穿什麽衣服可選的方式太多,順序,大小,反正這都沒有明確規定不能穿

老鳥第一反應是設計模式,根據小菜的穿衣服,讓小菜寫個穿衣系統

作者看到這個會想到怎麽直接用更好的方式,六大原則給寫出來

結果想來想去,卻不知道如何下手,還得看書他們怎麽實現的

小菜不思考,直接就寫,我是人嘛,人穿衣服,那穿衣服,穿褲子,穿鞋子等等

都屬於方法,幹脆就來個

技術分享

也就都屬於人的方法,直接來個最直接,最簡單,用老鳥的話說,能表現需要,最不符合面向對象的方式實現了一版

老鳥立馬,針對這種實現,提出了一類奇葩需求,我要是超人打扮怎麽扮

小菜一想,這得改人這個裏面的代碼了,違背了開閉原則

立馬寫了第二版,將人與衣服分離開來,這些變化都是在原來的基礎上

構建而來,先有了一個符合客戶的功能實現,當客戶提出新的需要,發現原有的功能滿足不了了,就得去改原來的代碼,多次修改,代碼越來越好,好的代碼都是重構出來的

第二版類圖

技術分享

老鳥一看雖然人與服飾分離,但一看客戶端的調用

技術分享

針對於不同的穿衣順序,會有不同的效果,對象分離就是面向對象了?

引出了裝飾模式的特點

技術分享

結構圖:

技術分享

小菜看了裝飾模式之後,明白了,並針對於裝飾的特點,提出自己對裝飾模式的理解

技術分享

技術分享

小菜在學習了裝飾模式之後,又寫了出了第三版代碼

技術分享

將飾模式總結:

裝飾模式是為已有功能動態地添加更多功能的一種方式,到底怎麽用?

技術分享

裝飾模式