設(shè)計模式概述:
? ? 設(shè)計模式是GoF(gang of four)提出來的馆揉。設(shè)計模式是程序員們經(jīng)過大量的實踐總結(jié)出來的設(shè)計模板。目的是要提高代碼的復(fù)用性,擴展性拥知,可讀性坞笙。
一岩饼、類之間的關(guān)系
? ? 1、依賴關(guān)系
? ? 關(guān)系很弱薛夜,偶然性籍茧,臨時性的,常用的場景是A類的方法參數(shù)需要使用到B類梯澜。
? ? 2寞冯、關(guān)聯(lián)關(guān)系
? ? 關(guān)聯(lián)關(guān)系是一種強依賴關(guān)系。關(guān)聯(lián)關(guān)系是長期的晚伙,平等的吮龄。分類有單向關(guān)聯(lián),雙向關(guān)聯(lián)咆疗,自關(guān)聯(lián)漓帚。
? ? 3、聚合關(guān)系
? ? 聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種特例午磁。體現(xiàn)的是整體和部分的關(guān)系尝抖。整體和部分可以相互相互分離有著自己的生命周期。
? ? 4漓踢、組合關(guān)系
? ? 組合關(guān)系體現(xiàn)是A contains B牵署,關(guān)系比聚合強,也稱為強聚合關(guān)系喧半。
? ? 5奴迅、繼承關(guān)系
? ? 6、實現(xiàn)關(guān)系(接口)
二挺据、六大原則 –>開閉原則是目標取具,里氏原則是基礎(chǔ),依賴倒轉(zhuǎn)原則是手段
? ? 1扁耐、Single Responsibility Principle 單一職責原則
這個原則用來控制類粒度的大小暇检,是高內(nèi)聚低耦合的指導(dǎo)方針,要求類不能承擔過多的職責婉称。一個類承擔的職責越多块仆,耦合性就會越高构蹬。當該類發(fā)生變化時,影響很多其他的類悔据。所以要將這些職責分離庄敛。但是分離的太多,會使得類過多科汗,不容易管理藻烤。所以要看程序員的經(jīng)驗。
? ? 2头滔、Interface Segaregation Principle 接口隔離原則
這個原則和單一職責原則有點類似怖亭,單一職責原則針對的是類的粒度客人接口隔離原則針對的是接口的粒度。
一個接口定義一個規(guī)范坤检,如果規(guī)范定義的范圍太廣兴猩,我們需要將他分割成更小的接口。接口也不能分的過細缀蹄。
? ? 3峭跳、open closed principle 開閉原則 最重要 設(shè)計目標
? ? 該原則是Bertrand Meyer1988年提出的要求設(shè)計類時對擴展開放,對修改關(guān)閉缺前。當類創(chuàng)建好了以后蛀醉,我們盡量不要去修改,而是用增加類的方式去代替修改衅码。所以抽象化是開閉原則的關(guān)鍵拯刁。這要求我們要降低類之間的耦合,所謂的解耦逝段。當并不代表類之間沒有關(guān)系垛玻。如果一個項目種的類都沒有關(guān)系了,那就不是一個程序了奶躯。由關(guān)系帚桩,但是關(guān)系要解耦、封裝嘹黔。
? ? 4账嚎、Liskov Substitution Principle 里氏替換原則 –>多態(tài)
該原則是Barbara Liskov和Jeannette Wing 在1994年提出。且2008年于Barbara Liskov女士獲得了圖靈獎儡蔓。該原則是實現(xiàn)開閉原則的重要方式之一郭蕉;
多態(tài)是里氏的一個應(yīng)用,Java在編譯期喂江,會檢查一個程序是否符合里氏替換原則召锈。
該原則的含義為在程序中使用的是父類對象,那么將父類用子類替換調(diào)获询,程序不會包任何錯誤和異常涨岁,反過來不成立拐袜,若果程序中使用的是子類對象,不一定能使用父類對象梢薪。
應(yīng)用場景:方法傳參時阻肿,參數(shù)類型時父類,我們可以傳入子類沮尿。但是如果參數(shù)類型時子類,不能傳入父類较解。
程序中盡量使用基類(接口)定義畜疾,運行時確定子類類型,替換父類對象印衔。
5啡捶、Dependence Inversion Principle 依賴倒轉(zhuǎn)原則
該原則是1996年由Robert.C.Martin提出。抽象不依賴于細節(jié)奸焙,細節(jié)依賴抽象瞎暑。即面向抽象類/接口編程,不是針對具體子類和實現(xiàn)類編程与帆。
? ? 通過該原則我們在子類中定義的方法應(yīng)該盡量和抽象類保持一致了赌,而不要給出多余的方法,因為抽象類無法調(diào)用玄糟。
? ? 實現(xiàn)依賴倒轉(zhuǎn)原則勿她,我們要針對抽象類和接口編程,將具體的對象注入到其他依賴關(guān)系的類中(依賴注入)Dependency Injection(DI)常用的注入方式由三種:構(gòu)造注入阵翎,settter注入逢并,接口注入。
構(gòu)造注入和Setter注入是指在類中定義抽象類/接口類型的屬性郭卫。然后通過構(gòu)造方法和Setter方法傳入具體的子類/實現(xiàn)類砍聊。而接口注入是在方法形參方法形參,返回值盡量使用父類/接口贰军,在方法調(diào)用時傳入具體的實現(xiàn)類/子類玻蝌。
? ? 6、Law of Demeter 迪米特原則
迪米特原則又稱為最少知識原則(Least Knowledge Principle)谓形。一個實體應(yīng)該盡少的和其他實體發(fā)生關(guān)系灶伊。這樣當我們?nèi)バ薷囊粋€模塊的時候就會修改很少的其他模塊,擴展會更容易寒跳。這樣迪米特法則就可以降低系統(tǒng)的耦合度聘萨,使得類和類之間保持松散的耦合關(guān)系。但是一個應(yīng)用中不存在類和類的耦合度都是0的情況童太,如果是這樣米辐,程序就廢了胸完。
? ? 迪米特法則要求只和你的直接朋友通訊,不要和陌生人說話翘贮。對于一個對象赊窥,他的直接朋友為:
? ? 1)、當前對象本身 this
? ? 2)狸页、當前對象所創(chuàng)建的對象
? ? 3)锨能、當前對象的成員對象
? ? 4)、以參數(shù)形式傳入當前對象的對象
? ? 5)芍耘、當前對象是一個集合址遇,集合中的對象元素都是朋友
除了以上的都是陌生人。如果一定要和陌生人說話斋竞,那可以通過第三者來傳達(代理)倔约。
三、設(shè)計模式分類
? ? 設(shè)計模式分為創(chuàng)建型坝初、結(jié)構(gòu)型浸剩、行為型
1、創(chuàng)建型
? ? 單例模式 Singleton
? ? 工廠三姐妹:簡單工廠鳄袍、工廠方法绢要、抽象工廠模式
? ? ? ? ? ? 簡單工廠模式 SimpleFactory
? ? ????????工廠方法模式 Factory Method
? ? ????????抽象工廠模式 Abstract Factory
? ? 建造者模式Builder
? ? ????????鏈式調(diào)用