設(shè)計(jì)模式:每一個(gè)模式描述一個(gè)在我們周圍不斷重復(fù)發(fā)生的問題,以及問題解決方案的核心麻昼。解決復(fù)用問題懦砂,分割不變的抽象類和變化的細(xì)節(jié)類抬探。
設(shè)計(jì)模式的8大原則:
1.依賴倒置原則(DIP)
高層模塊不應(yīng)該依賴于低層模塊,兩者都應(yīng)該依賴于抽象(穩(wěn)定)衣吠;抽象不應(yīng)該依賴于實(shí)現(xiàn)細(xì)節(jié)茶敏,實(shí)現(xiàn)細(xì)節(jié)應(yīng)該依賴于抽象。
2.開放封閉原則(OCP)
對擴(kuò)展開放缚俏,對更改封閉惊搏;類模塊應(yīng)該是可擴(kuò)展的贮乳,但是不可修改。
3.單一職責(zé)原則(SRP)
一個(gè)類應(yīng)該僅有一個(gè)引起它變化的原因胀屿;變化的方向隱含著類的責(zé)任塘揣。
4.Liskov替換原則(LSP)
子類必須能夠替換它們的基類;繼承表達(dá)類型抽象宿崭。
5.接口隔離原則(ISP)
不應(yīng)該強(qiáng)迫客戶程序依賴它們不使用的方法亲铡;接口應(yīng)該小而完備。
6.優(yōu)先使用對象組合葡兑,而不是類繼承奖蔓。
類繼承通常為“白箱復(fù)用”,對象組合通常為黑箱復(fù)用讹堤。
7.封裝變化點(diǎn)
使用封裝來創(chuàng)建對象之間的分界層吆鹤,讓設(shè)計(jì)者可以在分界層的一側(cè)進(jìn)行修改,而不會在另外一側(cè)產(chǎn)生影響洲守,從而實(shí)現(xiàn)層次間的松耦合疑务。
8.針對接口編程,而不是針對實(shí)現(xiàn)編程
不將變量類型生命為某個(gè)特定的具體類梗醇,而是聲明為某個(gè)具體接口知允;客戶無需獲知對象的具體類型,只需要知道對象具有的接口叙谨;減少系統(tǒng)各部分的依賴關(guān)系温鸽,從而實(shí)現(xiàn)高內(nèi)聚、松耦合的類型設(shè)計(jì)方案手负。
=============================================================
“組件協(xié)作”模式:組件協(xié)作模式通過晚綁定涤垫,實(shí)現(xiàn)框架與應(yīng)用程序之間的松耦合。
晚綁定:運(yùn)行時(shí)綁定竟终。? 早綁定:編譯時(shí)綁定蝠猬。
典型模式:Template Method /Strategy/Observer
Template Method :定義一個(gè)操作中的算法的骨架,將一些步驟延遲到子類中统捶。Template Method使得子類可以不改變算法結(jié)構(gòu)卻可以重定義該算法的一些步驟吱雏。
http://www.cnblogs.com/jiese/p/3180477.html
Strategy:定義一系列算法,把它們一個(gè)個(gè)封裝起來瘾境,并且可以使它們可以相互替換歧杏。該模式使得算法可以獨(dú)立于使用它的客戶程序的變化。
http://blog.csdn.net/zhengzhb/article/details/7609670
Observer:定義對象間的一種一對多的依賴關(guān)系迷守,以便當(dāng)一個(gè)對象的狀態(tài)發(fā)生改變時(shí)犬绒,所有依賴它的對象都得到通知并自動(dòng)更新。
http://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/observer.html