設(shè)計模式概述

設(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)用

? ? 原型模式 Prototype

2、結(jié)構(gòu)型

? ? 外觀模式 Facade

? ? 適配器模式Adaper


? ? 橋接模式Bridge

? ? 組合模式 Composite

? ? 代理模式 Proxy

? ? 裝飾器模式Decorater

? ? 享元模式FlyWeight

3畦木、行為型


? ? 策略模式 Strategy

? ? 觀察者模式 Observer

? ? 模板模式 Template Method

? ? 責任鏈模式 Chain of Responsibility

? ? 迭代器模式 Iterator

? ? 命令模式 Command

? ? 狀態(tài)模式 State

? ? 備忘錄模式 Memento

? ? 訪問者模式

? ? 中介者模式

? ? 解釋器模式


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袖扛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子十籍,更是在濱河造成了極大的恐慌蛆封,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勾栗,死亡現(xiàn)場離奇詭異惨篱,居然都是意外死亡,警方通過查閱死者的電腦和手機围俘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門砸讳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人界牡,你說我怎么就攤上這事簿寂。” “怎么了宿亡?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵常遂,是天一觀的道長。 經(jīng)常有香客問我挽荠,道長克胳,這世上最難降的妖魔是什么平绩? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮漠另,結(jié)果婚禮上捏雌,老公的妹妹穿的比我還像新娘。我一直安慰自己笆搓,他們只是感情好性湿,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著满败,像睡著了一般窘奏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葫录,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音领猾,去河邊找鬼米同。 笑死,一個胖子當著我的面吹牛摔竿,可吹牛的內(nèi)容都是我干的面粮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼继低,長吁一口氣:“原來是場噩夢啊……” “哼熬苍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袁翁,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤柴底,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粱胜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柄驻,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年焙压,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸿脓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡涯曲,死狀恐怖野哭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幻件,我是刑警寧澤拨黔,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站傲武,受9級特大地震影響蓉驹,放射性物質(zhì)發(fā)生泄漏城榛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一态兴、第九天 我趴在偏房一處隱蔽的房頂上張望狠持。 院中可真熱鬧,春花似錦瞻润、人聲如沸喘垂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽正勒。三九已至,卻和暖如春傻铣,著一層夾襖步出監(jiān)牢的瞬間章贞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工非洲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸭限,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓两踏,卻偏偏與公主長得像败京,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子梦染,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359