讀《大話設(shè)計(jì)模式》(1)用自己的話概括設(shè)計(jì)模式

1)特點(diǎn) 2)使用場景及補(bǔ)充

工廠模式(Factory):

1)將對象的創(chuàng)建實(shí)現(xiàn)隔離

2)適用于有繼承結(jié)構(gòu)的對象創(chuàng)建颖低,根據(jù)參數(shù)決定實(shí)例化的內(nèi)容


策略模式(Strategy)(Context):

1)封裝算法据沈,可相互替換

2)適用于多種算法可互相替換使用潮尝。可結(jié)合工廠模式鲫售,根據(jù)傳入?yún)?shù)在構(gòu)造函數(shù)中生成具體算法對象佑惠。最終返回計(jì)算結(jié)果宙址。


裝飾模式(Decorator):

1)動(dòng)態(tài)的給對象添加額外的職責(zé)

2)適用于要對一個(gè)對象的某些操作前后進(jìn)行一些附加職責(zé)的時(shí)候,而且這些職責(zé)是變化(有/無 先/后)的债热。而且根據(jù)開閉原則砾嫉,在擴(kuò)展功能的時(shí)候優(yōu)先思考裝飾模式


代理模式(Proxy)

1)控制一個(gè)對象的訪問

2)應(yīng)用于要為對象添加權(quán)限限制或者加鎖,添加訪問計(jì)數(shù)等附加職責(zé)窒篱。訪問對象一定要先經(jīng)過代理焕刮。


工廠方法模式(Factory method):

1)定義接口使實(shí)例化的工作延遲到子類

2)工廠模式是在工廠內(nèi)部用switch等方式判斷創(chuàng)建什么對象舶沿。工廠方法把這個(gè)問題提前了,用戶傳進(jìn)來的不是switch的參數(shù)而是具體要使用的哪種工廠配并。問題前移~


原型模式(Prototype):

1)通過拷貝創(chuàng)建新對象

2)原型模式和工廠模式相同括荡,是創(chuàng)建對象的方式,通過拷貝創(chuàng)建對象溉旋,創(chuàng)建者不用知道創(chuàng)建的細(xì)節(jié)畸冲,最重要的是可以得到對象運(yùn)行時(shí)的狀態(tài)」劾埃【這里設(shè)計(jì)了深淺拷貝邑闲,java clone()方法原理是值復(fù)制,引用指向同一內(nèi)容梧油,所以淺拷貝并不能復(fù)制對象苫耸。實(shí)現(xiàn)深拷貝一種是在set方法里創(chuàng)建新的對象,一種是在clone方法里面再次調(diào)用類成員的clone】


模版模式(Template):

1)提煉骨架儡陨,子類實(shí)現(xiàn)細(xì)節(jié)

2)適用于流程相同但具體實(shí)現(xiàn)不同的case鲸阔,如果說策略模式給的是一種算法的可替換,那么模版模式更像是一組解決方案迄委,并且將整個(gè)流程提出的感覺褐筛。


外觀模式(Facade):

1)提煉接口,封裝部分叙身,將代碼分塊

2)適用于:a.分割表示層渔扎,邏輯層和數(shù)據(jù)層 b.對于復(fù)雜的老舊的邏輯塊封裝一層facade可以減少依賴,提煉接口也可以更好的分工信轿。


建造者模式(Builder):

1)相較于工廠模式晃痴,監(jiān)督創(chuàng)建細(xì)節(jié)

2)建造者模式也是創(chuàng)建對象的模式,被創(chuàng)建的對象有相同的創(chuàng)造流程和不同的實(shí)現(xiàn)财忽;監(jiān)督者接受創(chuàng)建的具體對象并且執(zhí)行整個(gè)流程并返回執(zhí)行之后的創(chuàng)建的具體對象倘核。即調(diào)用放知道要?jiǎng)?chuàng)建什么樣的產(chǎn)品但是無需知道創(chuàng)建過程,且保證所有創(chuàng)建步驟都進(jìn)行即彪。


觀察者模式(Observer):

1)解決一對多的依賴關(guān)系的變化引發(fā)修改問題紧唱。

2)觀察者維護(hù)觀察對象數(shù)組,當(dāng)觀察者發(fā)生變化的時(shí)候循環(huán)執(zhí)行所有與之依賴的對象的更改方法隶校,完成更新漏益。


抽象工廠模式(Abstract Factory):

1)解決不同“系列”對象的創(chuàng)建

2)不同于工廠模式可以根據(jù)參數(shù)決定創(chuàng)建的對象。也不像工廠方法模式深胳,根據(jù)創(chuàng)建的具體工廠绰疤,決定返回的對象。抽象工廠主要解決的是“系列”的切換舞终,每個(gè)工廠可以創(chuàng)建一個(gè)系列產(chǎn)品的各個(gè)組件轻庆。有利于“系列間的切換癣猾,并且將創(chuàng)建過程與客戶端分離。


狀態(tài)模式(Status):

1)將狀態(tài)變化的邏輯抽離余爆,是狀態(tài)的轉(zhuǎn)化成為每個(gè)具體狀態(tài)類自己的方法煎谍,易擴(kuò)展

2)適用于有大量ifelse或者swich判斷狀態(tài)變化代碼段的優(yōu)化,使類的職責(zé)單一龙屉,使擴(kuò)展?fàn)顟B(tài)更加容易呐粘。


適配器模式(Adapter):

1)解決接口不兼容問題

2)適用于使用原有的接口,又不想改變原有接口或?qū)崿F(xiàn)的結(jié)構(gòu)(在設(shè)計(jì)初期不應(yīng)考慮)


備忘錄模式(Memento):

1)用于恢復(fù)原來保存的狀態(tài)

2)適用于保存進(jìn)度或者report的程序設(shè)計(jì)转捕。值得一提的是要保存的類的備忘錄類與其并不存在關(guān)聯(lián)關(guān)系作岖,而是通過另一個(gè)管理者類控制,減輕了他們之間的耦合度五芝。


組合模式(Component):

1)實(shí)現(xiàn)樹結(jié)構(gòu)痘儡,統(tǒng)一管理

2)組合模式適用于管理整體與部分,通過都繼承同一個(gè)抽象類枢步,統(tǒng)一相同的方法沉删,通過調(diào)用“根”結(jié)構(gòu)的方法,使所有部分完成操作醉途》澹【就是樹結(jié)構(gòu)的實(shí)現(xiàn)】


迭代器模式(Iterator):

1)實(shí)現(xiàn)對不同類型數(shù)據(jù)的不同方式的遍歷

2)java中的各種集合列表等數(shù)據(jù)結(jié)構(gòu)都實(shí)現(xiàn)了iterator,也就是可以使用while(xxx.iterator().hasNext())進(jìn)行遍歷隘擎,當(dāng)然foreach也是適用于iterator的實(shí)現(xiàn)類殴穴。當(dāng)然我們也可以通過實(shí)現(xiàn)iterator方法來改變遍歷方式。


單例模式(Singleton):

1)保證一個(gè)類只被實(shí)例化一次

2)常見的幾種實(shí)現(xiàn)方法:雙重校驗(yàn)鎖货葬;synchronize保證線程安全采幌,static XX instance=new XX()裝載時(shí)實(shí)例化,用enum實(shí)現(xiàn)單例震桶。


橋接模式(Bridge):

1)將抽象分離休傍,使其獨(dú)立變化

2)適用于龐大的繼承結(jié)構(gòu),或者可以根據(jù)多種方式建立繼承關(guān)系的設(shè)計(jì)蹲姐。涉及到聚合優(yōu)于繼承原則磨取,繼承結(jié)構(gòu)是緊耦合的,父類變化子類受到影響淤堵,而聚合卻不是寝衫。將某一特性或者說是一層繼承的共性提煉出來聚合到父類完成解耦顷扩。另一種判斷是用isa和hasa判斷是否有可以解耦的部分拐邪。


命令模式(Commond):

1)將請求者和執(zhí)行者隔離,通過管理者管理命令的執(zhí)行隘截。

2)其實(shí)命令模式的使用場景很局限扎阶,因?yàn)槲覀円恢狈钚蓄愂且粋€(gè)名詞而不是一個(gè)操作汹胃。但是命令模式也有其好處就是可以對操作進(jìn)行管理。通過管理者維護(hù)命令隊(duì)列實(shí)現(xiàn)決定何時(shí)執(zhí)行命令东臀,記錄執(zhí)行的命令着饥,撤銷已執(zhí)行命令等操作。


責(zé)任鏈模式(Chain of Responsibility):

1)請求方與執(zhí)行方解耦

2)適用于代碼中有層級關(guān)系的ifelse結(jié)構(gòu)惰赋。父類包含自己的引用宰掉,子類將引用指向下一個(gè)責(zé)任人(另一個(gè)子類),由于都實(shí)現(xiàn)了同樣的方法赁濒,所以若子類1不能處理則調(diào)用下一個(gè)責(zé)任人的處理方法轨奄。對于調(diào)用方只需知道第一責(zé)任人是誰就可以了。


中介者模式(Mediator):

1)減少類與類之間的依賴拒炎,把類之間的交互由中介者完成

2)適用于一組對象以定義良好的但是復(fù)雜的方式進(jìn)行通訊挪拟,比如Form和控件,F(xiàn)orm就是中介者击你,每個(gè)控件可能會其他控件但不通過直接依賴實(shí)現(xiàn)玉组。但是一般不考慮這種設(shè)計(jì)模式,因?yàn)橹薪檎弑旧硎且粋€(gè)低內(nèi)聚高耦合的結(jié)構(gòu)丁侄,雖然類的修改方便了惯雳,但是中介者的改動(dòng)不容易控制。


享元模式(FlyWeight):

1)通過共享實(shí)例減少細(xì)粒度實(shí)例的個(gè)數(shù)

2)適用于要new大量細(xì)粒度的類(除了幾個(gè)參數(shù)其他都是相同的)鸿摇,比如棋子吨凑。將不可共享的參數(shù)外部化,在使用的時(shí)候作為參數(shù)傳入户辱。減少存儲開銷鸵钝。


解釋器模式(Interpreter):

1)定義一種新的文法解讀

2)適用于自己要定義一種通用且常用的規(guī)則解決一些常見的問題,比如正則表達(dá)式庐镐,樂譜翻譯器等恩商。


訪問者模式(Visitor):

1)將操作方法從類中抽離,使操作擴(kuò)展性強(qiáng)必逆。

2)訪問者模式是有條件苛刻怠堪,所以應(yīng)用場景較少。適用于某類的子類不會發(fā)生改變且數(shù)量不多的情況名眉,且操作存在差異粟矿。比如男人和女人。這樣每種操作只需要實(shí)現(xiàn)子類數(shù)量個(gè)實(shí)現(xiàn)就可以了损拢。擴(kuò)展操作的時(shí)候只需添加一個(gè)visitor的子類陌粹,實(shí)現(xiàn)對應(yīng)元素類的子類的方法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末福压,一起剝皮案震驚了整個(gè)濱河市掏秩,隨后出現(xiàn)的幾起案子或舞,更是在濱河造成了極大的恐慌,老刑警劉巖蒙幻,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件映凳,死亡現(xiàn)場離奇詭異,居然都是意外死亡邮破,警方通過查閱死者的電腦和手機(jī)诈豌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抒和,“玉大人队询,你說我怎么就攤上這事」钩希” “怎么了蚌斩?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長范嘱。 經(jīng)常有香客問我送膳,道長,這世上最難降的妖魔是什么丑蛤? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任叠聋,我火速辦了婚禮,結(jié)果婚禮上受裹,老公的妹妹穿的比我還像新娘碌补。我一直安慰自己,他們只是感情好棉饶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布厦章。 她就那樣靜靜地躺著,像睡著了一般照藻。 火紅的嫁衣襯著肌膚如雪袜啃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天幸缕,我揣著相機(jī)與錄音群发,去河邊找鬼。 笑死发乔,一個(gè)胖子當(dāng)著我的面吹牛熟妓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播栏尚,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼起愈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起告材,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坤次,失蹤者是張志新(化名)和其女友劉穎古劲,沒想到半個(gè)月后斥赋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡产艾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年疤剑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闷堡。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隘膘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杠览,到底是詐尸還是另有隱情弯菊,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布踱阿,位于F島的核電站管钳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏软舌。R本人自食惡果不足惜才漆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佛点。 院中可真熱鬧醇滥,春花似錦、人聲如沸超营。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽演闭。三九已至怀喉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間船响,已是汗流浹背躬拢。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留见间,地道東北人聊闯。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像米诉,于是被迫代替她去往敵國和親菱蔬。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用拴泌、多...
    MinoyJet閱讀 3,947評論 1 15
  • 設(shè)計(jì)模式基本原則 開放-封閉原則(OCP)魏身,是說軟件實(shí)體(類、模塊蚪腐、函數(shù)等等)應(yīng)該可以拓展箭昵,但是不可修改。開-閉原...
    西山薄涼閱讀 3,798評論 3 14
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法回季,類相關(guān)的語法家制,內(nèi)部類的語法,繼承相關(guān)的語法泡一,異常的語法颤殴,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)鼻忠,斷路器涵但,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 春去秋來,最美莫過人間四月天帖蔓,四月的龍山矮瘟,正是木棉花紅時(shí)。在遠(yuǎn)離她的這里讨阻,我悠悠遙望芥永,喃喃自念:龍山的木棉花又開了...
    c老靈魂閱讀 651評論 0 2