Java設(shè)計(jì)模式

設(shè)計(jì)模式六大原則

1.開(kāi)放封閉原則:對(duì)擴(kuò)展開(kāi)放械巡,對(duì)修改封閉萧锉,意即程序拓展時(shí)不要?jiǎng)釉械拇a

2.LSP原則:任何基類可以出現(xiàn)的地方沐绒,子類一定可以出現(xiàn)

3.依賴倒置原則:使用接口谋作,依賴于抽象而不是具體

4.接口隔離原則:為了解耦息裸,使用多個(gè)相互隔離的接口

5.迪米特法則:一個(gè)實(shí)體應(yīng)當(dāng)盡量少地與其他實(shí)體之間發(fā)生相互作用舀锨,使得系統(tǒng)功能模塊相對(duì)獨(dú)立岭洲。

6.CRP法則:盡量使用合成/聚合的方式,而不是使用繼承坎匿。


分類

1.創(chuàng)建型模式(在創(chuàng)建對(duì)象的過(guò)程中盡量隱藏創(chuàng)建細(xì)節(jié)盾剩,不直接使用new)

工廠模式(Factory Pattern)

抽象工廠模式(Abstract Factory Pattern)

單例模式(Singleton Pattern)

建造者模式(Builder Pattern)

原型模式(Prototype Pattern)

2.結(jié)構(gòu)型模式(主要關(guān)注類和對(duì)象的繼承、組合)

適配器模式(Adapter Pattern)

橋接模式(Bridge Pattern)

過(guò)濾器模式(Filter替蔬、Criteria Pattern)

組合模式(Composite Pattern)

裝飾器模式(Decorator Pattern)

外觀模式(Facade Pattern)

享元模式(Flyweight Pattern)

代理模式(Proxy Pattern)

3.行為型模式(關(guān)注對(duì)象之間的通信)

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

命令模式(Command Pattern)

解釋器模式(Interpreter Pattern)

迭代器模式(Iterator Pattern)

中介者模式(Mediator Pattern)

備忘錄模式(Memento Pattern)

觀察者模式(Observer Pattern)

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

空對(duì)象模式(Null Object Pattern)

策略模式(Strategy Pattern)

模板模式(Template Pattern)

訪問(wèn)者模式(Visitor Pattern)


工廠模式

現(xiàn)在在要?jiǎng)?chuàng)建一些對(duì)象告私,他們都實(shí)現(xiàn)了某個(gè)接口或者繼承了某個(gè)類。我們不在需要的時(shí)候使用new操作符承桥,而是把創(chuàng)建的操作讓一個(gè)“工廠類”完成驻粟,我們?cè)谛枰聦?duì)象時(shí)只需要把需要的東西的名字以參數(shù)形式傳遞給工廠類就行了,而不用去管怎么創(chuàng)建的凶异。

抽象工廠模式

在工廠模式中蜀撑,一個(gè)工廠類只生產(chǎn)實(shí)現(xiàn)某個(gè)接口或者繼承了某個(gè)類的對(duì)象,也就是具體工廠生產(chǎn)具體對(duì)象剩彬,如果建立一個(gè)抽象工廠類和若干個(gè)具體工廠酷麦,每個(gè)具體工廠負(fù)責(zé)產(chǎn)生一類對(duì)象,就成了抽象工廠模式襟衰。就是一個(gè)抽象工廠類可以生產(chǎn)多種類型的對(duì)象贴铜,具體每種類型的對(duì)象怎么生成,要用一個(gè)專門的工廠類來(lái)決定瀑晒。

單例模式

一個(gè)類绍坝,他雖然有構(gòu)造方法,但是把它設(shè)定為private苔悦,不能被外界使用轩褐。這個(gè)類只存在一個(gè)實(shí)例,保存在這個(gè)類自己的一個(gè)靜態(tài)字段里玖详,如果要用這個(gè)類的實(shí)例屬性把介、實(shí)例方法勤讽,都通過(guò)這個(gè)靜態(tài)字段訪問(wèn)這個(gè)唯一的實(shí)例來(lái)實(shí)現(xiàn)。

建造者模式

現(xiàn)在要?jiǎng)?chuàng)建一個(gè)很復(fù)雜的對(duì)象拗踢,我們把這個(gè)工作分開(kāi)來(lái)做脚牍,先定義并實(shí)現(xiàn)一個(gè)建造者類,在這個(gè)類中實(shí)現(xiàn)構(gòu)建這個(gè)對(duì)象所需要的全部方法巢墅。再定義并實(shí)現(xiàn)一個(gè)導(dǎo)演類诸狭,把一個(gè)建造者類傳給它,讓它負(fù)責(zé)這些方法調(diào)用的邏輯次序和對(duì)象的組合君纫,然后統(tǒng)一給客戶端返回一個(gè)生成好的復(fù)雜對(duì)象驯遇。

原型模式

已經(jīng)有了一個(gè)對(duì)象了,我們創(chuàng)建對(duì)象時(shí)直接復(fù)制它蓄髓,不需要新建了叉庐。

適配器模式

一個(gè)類和另一個(gè)類有一些相似的操作,但是它們的形式是不一致的会喝,需要有一個(gè)東西把它包裹起來(lái)陡叠,變成另一種比較合適的形式。

類適配:創(chuàng)建新類肢执,繼承源類匾竿,并實(shí)現(xiàn)新接口,例如

class? adapter extends oldClass? implements newFunc{}

對(duì)象適配:創(chuàng)建新類持源類的實(shí)例蔚万,并實(shí)現(xiàn)新接口,例如

class adapter implements newFunc { private oldClass oldInstance ;}

接口適配:創(chuàng)建新的抽象類實(shí)現(xiàn)舊接口方法临庇。例如

abstract class adapter implements oldClassFunc { void newFunc();}

裝飾器模式

一個(gè)類有一些方法反璃,但是我們想讓這些方法調(diào)用的時(shí)候多執(zhí)行一些東西,于是可以定義一個(gè)裝飾器的類假夺,它和被修飾的類同時(shí)一個(gè)類的子類或是一個(gè)接口的實(shí)現(xiàn)淮蜈,然后將這個(gè)被修飾的類委托給這個(gè)裝飾器類,如果想使用這個(gè)修飾后的方法已卷,只需要調(diào)用這個(gè)修飾器的方法就可以了梧田。

代理模式

我想訪問(wèn)一個(gè)對(duì)象,但是這個(gè)對(duì)象出于多種考慮侧蘸,比如細(xì)節(jié)復(fù)雜裁眯、需要控制訪問(wèn)、隱藏細(xì)節(jié)等讳癌,不能讓別人直接使用穿稳,必須要使用一個(gè)中間層性質(zhì)的代理類,對(duì)這個(gè)對(duì)象的所有訪問(wèn)都由這個(gè)代理類來(lái)完成晌坤。

外觀模式

我現(xiàn)在有一個(gè)成套的系統(tǒng)逢艘,有若干接口旦袋、類,但是直接操作這些類是一個(gè)很復(fù)雜的過(guò)程它改,于是額外再定義一個(gè)總結(jié)性質(zhì)的類疤孕,給幾個(gè)比較有概括性的、簡(jiǎn)潔的方法去操作這個(gè)系統(tǒng)央拖,以此來(lái)簡(jiǎn)化訪問(wèn)祭阀。

橋接模式

如果我現(xiàn)在有一個(gè)抽象的父類,和一些具體的子類爬泥,本來(lái)他們應(yīng)該是一個(gè)繼承的關(guān)系柬讨,但我認(rèn)為這樣會(huì)使兩個(gè)類耦合過(guò)緊,于是強(qiáng)行使用委派袍啡、組合的方式踩官,使兩者可以相對(duì)獨(dú)立的變化。具體就是在抽象類中實(shí)現(xiàn)一些基本操作境输,然后把一些需要細(xì)分的操作委派出去蔗牡,可以把那些原來(lái)的子類統(tǒng)一到一個(gè)接口里,然后把這個(gè)接口和原來(lái)的父類組合嗅剖。

組合模式

定義一個(gè)比較寬泛的類辩越,一個(gè)具體的對(duì)象屬于這個(gè)類,把這些具體的對(duì)象按一定方式組合起來(lái)也屬于這個(gè)類信粮。

享元模式

很多對(duì)象都需要用同一個(gè)對(duì)象黔攒,但他們都自己創(chuàng)建了一份保存,這樣會(huì)造成內(nèi)存大量浪費(fèi)强缘。把這一部分抽出來(lái)督惰,只創(chuàng)建一份,供這些對(duì)象共同使用旅掂,就可以節(jié)省內(nèi)存赏胚。

觀察者模式

一組對(duì)象依賴于某一個(gè)對(duì)象,這個(gè)對(duì)象的狀態(tài)的更新會(huì)影響這一組對(duì)象商虐,于是把這組對(duì)象稱為觀察者觉阅,放在被觀察者一個(gè)不定長(zhǎng)數(shù)組的字段里,兩者分別保存對(duì)方的引用秘车,被觀察者更新時(shí)會(huì)調(diào)用觀察者的方法來(lái)提醒觀察者典勇。

訪問(wèn)者模式

我現(xiàn)在有一個(gè)類,上面有一些操作叮趴,但是我不想把它寫到這個(gè)類里痴柔,所以我把這個(gè)功能單獨(dú)拿出來(lái),需要執(zhí)行這個(gè)功能的時(shí)候疫向,把這個(gè)類的引用給那個(gè)功能類咳蔚,讓那個(gè)功能類操作這個(gè)類豪嚎。

狀態(tài)模式

一個(gè)類,他的一些操作的具體過(guò)程是根據(jù)它當(dāng)前的狀態(tài)來(lái)決定的谈火,而這個(gè)狀態(tài)取決于當(dāng)前環(huán)境的上下文侈询。

備忘錄模式

對(duì)一個(gè)類的對(duì)象的狀態(tài)進(jìn)行可持久化處理,方法是另外設(shè)立一個(gè)備忘錄類糯耍,記錄狀態(tài)的變化過(guò)程扔字,然后就可以恢復(fù)到某個(gè)歷史狀態(tài)。

策略模式

對(duì)于一個(gè)操作温技,實(shí)現(xiàn)它的算法有很多革为,我把這些算法每個(gè)都建立一個(gè)類,實(shí)現(xiàn)那個(gè)方法類的接口舵鳞,在需要執(zhí)行這個(gè)操作的地方震檩,要運(yùn)用某個(gè)算法,只需要把那個(gè)算法對(duì)應(yīng)的類傳進(jìn)去就行了蜓堕。

模板模式

一個(gè)操作抛虏,它的每一步可能有細(xì)節(jié)上的區(qū)別,但是它的大概框架是確定的套才,在執(zhí)行各個(gè)步驟的時(shí)候迂猴,先用一些抽象類放在對(duì)應(yīng)的位置,等隨后再定義一些具體類去填充它背伴。

迭代器模式

一個(gè)類沸毁,里面有一組元素,要按照某個(gè)次序一次訪問(wèn)這些元素傻寂,于是單獨(dú)設(shè)立一個(gè)迭代器以清,無(wú)需暴露內(nèi)部復(fù)雜實(shí)現(xiàn),直接告訴你當(dāng)前是哪個(gè)元素崎逃、下一個(gè)是哪個(gè)元素,就可以按照這種特定次序遍歷這些元素了眉孩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末个绍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子浪汪,更是在濱河造成了極大的恐慌巴柿,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件死遭,死亡現(xiàn)場(chǎng)離奇詭異广恢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)呀潭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門钉迷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)至非,“玉大人,你說(shuō)我怎么就攤上這事糠聪』耐郑” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵舰蟆,是天一觀的道長(zhǎng)趣惠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)身害,這世上最難降的妖魔是什么味悄? 我笑而不...
    開(kāi)封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮塌鸯,結(jié)果婚禮上侍瑟,老公的妹妹穿的比我還像新娘。我一直安慰自己界赔,他們只是感情好丢习,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著淮悼,像睡著了一般咐低。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袜腥,一...
    開(kāi)封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天见擦,我揣著相機(jī)與錄音,去河邊找鬼羹令。 笑死鲤屡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的福侈。 我是一名探鬼主播酒来,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肪凛!你這毒婦竟也來(lái)了堰汉?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伟墙,失蹤者是張志新(化名)和其女友劉穎翘鸭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體戳葵,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡就乓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片生蚁。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡噩翠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出守伸,到底是詐尸還是另有隱情绎秒,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布尼摹,位于F島的核電站见芹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蠢涝。R本人自食惡果不足惜玄呛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望和二。 院中可真熱鬧徘铝,春花似錦、人聲如沸惯吕。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)废登。三九已至淹魄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間堡距,已是汗流浹背甲锡。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留羽戒,地道東北人缤沦。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像易稠,于是被迫代替她去往敵國(guó)和親缸废。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355