最常用的12種設(shè)計(jì)模式小結(jié)
更新時(shí)間:2011年08月09日 21:31:33 作者:
最常用的12種設(shè)計(jì)模式小結(jié),學(xué)習(xí)js的朋友可以參考下。
1.策略模式(Strategy): 定義了算法家族, 分別封裝起來, 讓它們之間可以互相替換.
比如Collections.sort(List list, Comparator c); 可以通過實(shí)現(xiàn)多個(gè)Comparator接口來達(dá)到多種排序的目的.
2.裝飾著模式(Decorator): 動(dòng)態(tài)的給一個(gè)對(duì)象添加一些額外的職責(zé).
比如java.io包. BufferedInputStream封裝了FileInputStream, 它們都實(shí)現(xiàn)了InputStream接口, 但前者實(shí)現(xiàn)了readLine方法.
3.代理模式(Proxy): 為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問.
比如在用戶登錄時(shí), 真正的登錄類和代理登錄類都實(shí)現(xiàn)了Login接口, 不同的是Proxy類的方法中增加了用戶是否合法的判斷, 只有合法時(shí)才去調(diào)用真正登錄類的login方法. 用戶訪問的其實(shí)是Proxy的login方法.
4.工廠模式(Factory): 定義一個(gè)用以創(chuàng)建對(duì)象的接口, 讓子類決定實(shí)例化哪個(gè)類.
當(dāng)遇到需要根據(jù)某個(gè)前提條件創(chuàng)建不同的類實(shí)現(xiàn)時(shí), 會(huì)實(shí)用工廠模式.
5.模板模式(Template): 定義一個(gè)操作中的算法骨架, 而將一些步驟延遲到子類中.
比如HibernateTemplate, 在Template中已經(jīng)定義了Connection開關(guān)的實(shí)現(xiàn), 用戶只需要在子類中根據(jù)不同的業(yè)務(wù)寫不同的sql.
6.外觀模式(Facade): 為子系統(tǒng)中的一組接口提供一個(gè)一致的界面.
一直在用, 比如DBUtil, 將所有數(shù)據(jù)庫對(duì)象封裝了, 只留了DBUtil.getDBUtil()這個(gè)接口.
7.建造者模式(Builder): 將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離.
8.觀察者模式(Observer): 定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一主題對(duì)象,在它的狀態(tài)發(fā)生變化時(shí),會(huì)通知所有的觀察者.
比如ServletContextListener, 在applcation啟動(dòng)時(shí), 會(huì)通知所有這個(gè)接口的實(shí)現(xiàn)類.
9.抽象工廠模式(Abstract Factory): 提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口, 而無需指定它們具體的類.
10.適配器模式(Adapter): 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口.
11.單例模式(Singleton): 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局控制點(diǎn).
比如在加載配置文件時(shí), 可使用該模式.
12.命令模式(Command): 將一個(gè)請(qǐng)求封裝成為一個(gè)對(duì)象, 使可以用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化.
比如Struts的MVC結(jié)構(gòu), 其實(shí)就是個(gè)Command模式.
比如Collections.sort(List list, Comparator c); 可以通過實(shí)現(xiàn)多個(gè)Comparator接口來達(dá)到多種排序的目的.
2.裝飾著模式(Decorator): 動(dòng)態(tài)的給一個(gè)對(duì)象添加一些額外的職責(zé).
比如java.io包. BufferedInputStream封裝了FileInputStream, 它們都實(shí)現(xiàn)了InputStream接口, 但前者實(shí)現(xiàn)了readLine方法.
3.代理模式(Proxy): 為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問.
比如在用戶登錄時(shí), 真正的登錄類和代理登錄類都實(shí)現(xiàn)了Login接口, 不同的是Proxy類的方法中增加了用戶是否合法的判斷, 只有合法時(shí)才去調(diào)用真正登錄類的login方法. 用戶訪問的其實(shí)是Proxy的login方法.
4.工廠模式(Factory): 定義一個(gè)用以創(chuàng)建對(duì)象的接口, 讓子類決定實(shí)例化哪個(gè)類.
當(dāng)遇到需要根據(jù)某個(gè)前提條件創(chuàng)建不同的類實(shí)現(xiàn)時(shí), 會(huì)實(shí)用工廠模式.
5.模板模式(Template): 定義一個(gè)操作中的算法骨架, 而將一些步驟延遲到子類中.
比如HibernateTemplate, 在Template中已經(jīng)定義了Connection開關(guān)的實(shí)現(xiàn), 用戶只需要在子類中根據(jù)不同的業(yè)務(wù)寫不同的sql.
6.外觀模式(Facade): 為子系統(tǒng)中的一組接口提供一個(gè)一致的界面.
一直在用, 比如DBUtil, 將所有數(shù)據(jù)庫對(duì)象封裝了, 只留了DBUtil.getDBUtil()這個(gè)接口.
7.建造者模式(Builder): 將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離.
8.觀察者模式(Observer): 定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一主題對(duì)象,在它的狀態(tài)發(fā)生變化時(shí),會(huì)通知所有的觀察者.
比如ServletContextListener, 在applcation啟動(dòng)時(shí), 會(huì)通知所有這個(gè)接口的實(shí)現(xiàn)類.
9.抽象工廠模式(Abstract Factory): 提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口, 而無需指定它們具體的類.
10.適配器模式(Adapter): 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口.
11.單例模式(Singleton): 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局控制點(diǎn).
比如在加載配置文件時(shí), 可使用該模式.
12.命令模式(Command): 將一個(gè)請(qǐng)求封裝成為一個(gè)對(duì)象, 使可以用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化.
比如Struts的MVC結(jié)構(gòu), 其實(shí)就是個(gè)Command模式.
相關(guān)文章
JS實(shí)現(xiàn)瀏覽器打印、打印預(yù)覽示例
本篇文章主要介紹了JS實(shí)現(xiàn)瀏覽器打印、打印預(yù)覽示例。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02JavaScript中創(chuàng)建原子的方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于JavaScript中創(chuàng)建原子的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08原生js實(shí)現(xiàn)類似fullpage的單頁/全屏滾動(dòng)
這篇文章主要介紹了利用原生js實(shí)現(xiàn)類似fullpage的全屏滾動(dòng)的實(shí)現(xiàn)方法,文中給出了完整的實(shí)例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考價(jià)值,需要的朋友們可以參考借鑒,下面來一起看看吧。2017-01-01JavaScript實(shí)現(xiàn)連連看連線算法
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)連連看連線算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01詳解GoJs節(jié)點(diǎn)的折疊展開實(shí)現(xiàn)
這篇文章主要為大家介紹了GoJs節(jié)點(diǎn)的折疊展開實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05