一疆偿、設(shè)計模式簡介及分類####
所謂模式妈橄,就是套路、固定的代碼翁脆。對于設(shè)計模式眷蚓,重要的是思維和思考方式的轉(zhuǎn)變。
-
創(chuàng)建型模式
單例模式反番、工廠模式沙热、抽象工廠模式、建造者模式罢缸、原型模式篙贸。 -
結(jié)構(gòu)型模式
適配器模式、橋接模式枫疆、裝飾模式爵川、組合模式、外觀模式息楔、享元模式寝贡、代理模式扒披。 -
行為型模式
模板方法模式、命令模式圃泡、迭代器模式碟案、觀察者模式、中介者模式颇蜡、備忘錄模式价说、解釋器模式、狀態(tài)模式风秤、策略模式鳖目、職責(zé)鏈模式、訪問者模式缤弦。
二领迈、常用設(shè)計模式####
1、單例模式
保證一個類只有一個實例甸鸟,并且提供一個范圍該實例的全局訪問點(diǎn)惦费。配置文件類,連接池抢韭,application(共享)薪贫,控制器對象,Bean對象等均采用該模式刻恭∏剖。考察的幾個要點(diǎn):線程安全、效率鳍贾、延時加載鞍匾。
主要形式
- 懶漢式
線程安全,效率高骑科,不能延時加載橡淑。一開始就創(chuàng)建了對象(所以不具有延遲加載),后來無論如何訪問都是同一個對象咆爽。 - 餓漢式
線程安全梁棠,效率低,延時加載斗埂。調(diào)用時才創(chuàng)建對象符糊,因為對象還沒創(chuàng)建,所以在高并發(fā)的情況下呛凶,可能得到不同的對象男娄,所以要使用同步(synchronized)[1],降低了效率。 - 雙重檢測鎖式
- 靜態(tài)內(nèi)部類式
- 枚舉單例
除枚舉單例外模闲,前4種方式有反射(reflaction)[2]和序列化漏洞建瘫,可構(gòu)造不同對象。
2围橡、工廠模式
設(shè)計模式的靈魂就是分工暖混,分工能夠組織龐大的項目缕贡,類和對象越多的話翁授,只有分工分的越細(xì),整個項目才更容易擴(kuò)展晾咪。而工廠模式就是實現(xiàn)創(chuàng)建者和使用者的分離收擦。這里要提一下面向?qū)ο蟮娜齻€設(shè)計原則。
a谍倦、OCP原則(開閉原則):一個軟件的實體應(yīng)當(dāng)對擴(kuò)展開放塞赂,對修改關(guān)閉。
b昼蛀、DIP原則(依賴反轉(zhuǎn)):要針對接口編程,不要針對實現(xiàn)編程。
c店归、LoD原則(迪米特原則):只與你直接的朋友通信靶衍,而避免和陌生人通信。
主要形式
在介紹之前夫植,先舉一個未使用工廠模式例子讹剔,以便說明工廠模式。
- 簡單工廠模式
劃分層級延欠,實現(xiàn)依賴的分離,隱藏細(xì)節(jié)沈跨。不完全實現(xiàn)OCP原則
- 工廠方法模式
- 抽象工廠模式
上面兩個模式都是在創(chuàng)建同一個接口下的子類狞玛,如果創(chuàng)建多個接口下的子類,就需要用到抽象工廠模式笤喳。
-
synchronized是Java語言的關(guān)鍵字为居,當(dāng)它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執(zhí)行該段代碼杀狡。
一蒙畴、當(dāng)兩個并發(fā)線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內(nèi)只能有一個線程得到執(zhí)行。另一個線程必須等待當(dāng)前線程執(zhí)行完這個代碼塊以后才能執(zhí)行該代碼塊膳凝。
二碑隆、然而,當(dāng)一個線程訪問object的一個synchronized(this)同步代碼塊時蹬音,另一個線程仍然可以訪問該object中的非synchronized(this)同步代碼塊上煤。
三、尤其關(guān)鍵的是著淆,當(dāng)一個線程訪問object的一個synchronized(this)同步代碼塊時劫狠,其他線程對object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞。
四永部、第三個例子同樣適用其它同步代碼塊独泞。也就是說,當(dāng)一個線程訪問object的一個synchronized(this)同步代碼塊時苔埋,它就獲得了這個object的對象鎖懦砂。結(jié)果,其它線程對該object對象所有同步代碼部分的訪問都被暫時阻塞组橄。
五荞膘、以上規(guī)則對其它對象鎖同樣適用。 ? - ?