版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、HINGXIA UN1VCRS1I中間件技術原理與應用Java設計模式學院數學計算機學院專業(yè)年 級 2011級學生學號 12011242707學生姓名蘇發(fā)瑞Java設計模式目錄1.設計模式21.1創(chuàng)建型模式 21.1.1原型模式21.2結構型模式41.2.1組合模式51.3行為型模式 91.3.1備忘錄模式 111Java設計模式1.設計模式1.1創(chuàng)建型模式AbstractFactory (抽象工廠) FactoryMethod (工廠方法) Singleton ( 單態(tài)模式 ) Builder (建造者模式) Protot*pe * 原型模式 )1.1.1原型模式用原型實例指定創(chuàng)建對象的種類
2、,并且通過拷貝這些原型創(chuàng)建新的對象。 適用性1. 當一個系統(tǒng)應該獨立于它的產品創(chuàng)*、構成和表示時。2. 當要實例化的類是在運行時刻指定時,例如,通過動態(tài)裝載。3. 為了避免創(chuàng)建一個與產品類層次平行的工廠 *層次時。4. 當一個類的實例只能有幾個不同狀態(tài)組合中的一種時。建立相應數目的原型并克隆它們可能比每次用合適的狀態(tài)手工實例化該類更 方便一些。匚I參與者1. Prototype聲明一個克隆自身的接口。2. Con cretePrototype實現(xiàn)一個克隆自身的操作。3. Clie nt讓一個原型克*自身從而創(chuàng)建一個新的對象。口類圖例子Prototypepublic class Prototyp
3、e impleme nts Cion eable private String n ame;public void setName(Stri ng n ame) this .n ame = n ame;public Stri ng getName() return this. name;public Object cion e()try retur n super.cl on e(); catch (Exceptio n e) e.pri ntStackTrace();return nu II;ConcretePrototypepubl*c class Con cretePrototype e
4、xte nd* Prototype public Con cretePrototype(Stri ng n ame) setName( name);Clientpublic clas* Test public static void main( Stri ng args) Prototype pro = new Con cretePrototy*e("prototype");Prototype pro2 = (Prototype)pro.cl on e();*ystem.out.pri ntl n(pro.getName()*;System.out.pri ntl n(pr
5、o2.getName();resultprototypeprototype小結:原始模型模式:通過給出一個原型對象來指明所要創(chuàng)建的對象的類型,然后用復制這個原型 對象的方法創(chuàng)建出更多同類型的對象。原始模型模式允許動態(tài)的增加或減少產品類,產品類 不需要非得有任何事先確定的等級結構,原始模型模式適用于任何的等級結構。缺點是每一 個類都必須配備一個克隆方法。例如:(1)QQ聊天,另嘰向我們打招呼,我們點個托管,設置對面內容,然后就自動回復了。( 2)設立原始尺寸,然后就可以根據原型復制更多的出來,代碼如下:package totype;/原型interface P
6、rototype void setSize( int x);void printSize();/ 一個具體類class Aimplements Prototype, Cloneable privateint size;public A( int x) this .size = x;Overridepublicvoid setSize( int x) this .size = x;Overridepublicvoid printSize() System.out.println("Size: "+ size);Overridepublic A clone() throws C
7、loneNotSupportedException return (A) super .clone();/需要很多類似的對象進行測試publicclass PrototypeTest publicstaticvoidmain(String args)throws CloneNotSupportedException A a = new A( 1);for (int i = 2; i <10; i+) Prototype temp = a.clone();temp.setSize(i);temp.printSize();1.2結構型模式Adapter *適配器模式* Bridge (橋接模
8、* ) Composite ( 組合模式) Decorator (裝 *模式) Facade (外觀模式 ) Flyweight (享元模式) Proxy (代理模式)1.2.1組合模式將對象組合成樹形結構以表示"部分-整體"的層次結構o "Composite使得用戶 對單個對象和組合對*的使用具有一致性。"適用性1. 你想表示對象的部分-整*層次結構2. 你希望用戶忽略組合對象與單個對象的不同,用戶將統(tǒng)一地使用組合結構 中的所有對象。 參與者1. Comp onent為組合中的對象聲明接口 在適當的情況下,實現(xiàn)所有類共有接口的缺省行為。聲明一個接口用于
9、訪問和管理Comp on e nt的子組件。( 可選)在遞歸結構中定義一個接口,用于訪問一個父部件,并在合 *的情況 下實現(xiàn)它。2. Leaf在組合中表示葉節(jié)點對象,葉節(jié)點沒有子節(jié)點。 在組合中定義節(jié)點對象的行為。3. Compos*te定義有子部件的*些部件的行為。 存儲子部件。在Component接口中實現(xiàn)與子部件有*的操作。4. Clie nt通過Component接*操縱組合部件的對象??陬悎D例子Componentp*blic abstract class Employer private String n ame;public void setName(Stri ng n ame)
10、this .n ame = *ame;public Stri ng getName() return this. name;public abstract void add(Employer employer*;public abstract void delete(Employer employer);public List employers;public void printin fo*) System.out.pri ntln(n ame);*ublic List getE*ployers() return this.employers;Leafpublic class Program
11、mer exte nds Employer public Programmer(Stri ng n ame) setNam* (n ame);employers = null;程序員,表示沒有下屬了public v*id add(Employer employer) public void delete(Employer employer) public class Pro*ectAssista nt exte nds Employer public ProjectAss*sta nt(Stri ng n ame) setName( name);employers = *ull;項目助理,表示
12、沒有下屬了public void add(Employer employer) public void delet*(Employer employer) Compositepublic class Project*a nager exte nds E*ployer public ProjectMa nager(Stri ng n ame) setName( name);employers = new A*rayList();public void add(Employer employer) employers.add(employer);public void delete(Emplo*e
13、r employer) employers.remove(employer);Clie*tpubl*c class Test public st*tic void main( Stri ng args) Employer pm = new ProjectManager(”項目經理");Emplo*er pa = new ProjectAssistant(”項目助理");Employer progra*mer1 = new Programmer("程序員一");Employer programmer2 = new Programmer("程序員二
14、");pm.add(pa);/為項目經理添加項目助理pm.add(programmer2);*項目經理*加程序員List ems = pm.getEm*loyers();for (Employer em : ems) System.out.pri ntl n(em.getNam*();*result項目助理 程序員二 小結: 合成模式:合成模式將對象組織到樹結構中,可以用來描述整體與部分的關系。合成模式就 是一個處理對象的樹結構的模式。合成模式把部分與整體的關系用樹結構表示出來。合成模 式使得客戶端把一個個單獨的成分對象和由他們復合而成的合成對象同等看待。例如:(1)Mary過完輪到
15、Sarly過生日,還是不要叫她自己挑了,不然這個月伙食費肯定玩 完,拿出我去年在華山頂上照的照片,在背面寫上“最好的的禮物,就是愛你的Fita”,再到街上禮品店買了個像框(賣禮品的 MM也很漂亮哦),再找隔壁搞美術設計的Mike設計了一個漂亮的盒子裝起來,我們都是Decorator,最終都在修飾我這個人呀,怎么樣,看懂了嗎?(2) 一美女,穿件時髦衣裳,留著時髦發(fā)型,帶著金銀首飾,腳踏著華麗的靴子,這樣一裝 扮,就更加漂亮了。(3 )可以通過一個統(tǒng)一的接口將文件和文件夾統(tǒng)一起來,對用戶提供一致的操作,屏蔽不同 的復制實現(xiàn)過程。我們在復制文件夾的時候,操作系統(tǒng)實現(xiàn)了對文件夾內的所有文件和文件 夾
16、的復制,即實現(xiàn)了組合對象的整體復制,而不是一個空的文件夾;這和我們復制單個文件 的體驗是一致的。這便是組合模式的妙處。完整的模擬代碼如下:1 package com.csufox.Composite;2import java.util.ArrayList;45 in terface Node6 public void copy(); /定義統(tǒng)一的接口:復制S- class Folder impleme nts Node 1 private String folderName;.1.1 private ArrayList nodeList =n ew ArrayList(); /用于存儲文件夾下
17、的文件夾或文件的信息12二 public Folder(Stri ng folderName) J this.folderName = folderName;16ipublic void add(Node node) /增加文件或文件夾iMno deList.add( no de);二2D21 public void copy() II文件夾復制操作實現(xiàn)遞歸空System.out.pri ntln(”復制文件夾:” + folderName);for(i nt i=0;i24Node n ode = (Node) nodeList.get(i);25no de.copy();262728293
18、0class File impleme nts Node31private String fileName;3233public File(String fileName)34this.fileName = fileName;353637public void copy()3SSystem.out.pri ntl n("復制文件:"+ fileName);血 i- 41工.public class Composite4: public static void main( Stri ng args)44Folder document = new Folder("我的
19、資料");/我的資料文件夾訃File book = new File("Java編程思想.pdf'); / 文檔文件Folder music = new Folder("我的音樂");/ 我的音樂文件夾工:File musicl = new File("你是我的眼.mp3"); / 音樂文件 1驅File music2 = new File("Without You.mp3"); /音樂文件 2電;:/確定樹形結構關系">document.add(book);:|document.add(m
20、usic);、二music.add(musicl);Xmusic.add(music2);54docume nt.copy(); /復制"我的資料”文件夾,遞歸地復制了其下所有文件夾和文件。、 運行結果如下:小復制文件夾:我的資料、':復制文件:Java編程思想.pdf遼復制文件夾:我的音樂61復制文件:你是我的眼.mp3復制文件:Without You.mp31.3行為型模式Chain of Responsibility (責任鏈模式 )Command ( 命令模式 )Interpreter (解釋器模式)Iterator (迭代器*式)Mediator (中介者模式 )M
21、emento ( 備忘錄模式 )Observer (觀察者模式)State (狀*模式)Strategy (策略模式)TemplateMethod (模板方法)Vis*tor (訪問者模式)1.3.1備忘錄模式在不破壞封裝性*前提下,捕獲一個對象的內部狀態(tài),并在該對象之外保存這 個狀態(tài)。這樣以后就可將該對象恢復到原先保存的狀態(tài)。適用性1. 必須*存一個對象在某一個時刻的(部分)狀態(tài),這樣以后需要時它才能恢復 到先前的狀態(tài)。2. 如果一個用接口來讓其它對象直接得到這些狀態(tài),將會暴露對象的實現(xiàn)細 節(jié)并破壞對象的封裝性。參與者1.Meme nto備忘錄存儲原發(fā)器對象的內部狀態(tài)。2.Origi nat
22、or原發(fā)器創(chuàng)建一個備忘錄,用以記錄當前時刻*的內部狀態(tài)。使用備忘錄恢復內部狀態(tài)3. Caretaker負責保存好備忘錄。不能對備忘錄的內*進行操作或檢查。類圖例子Mementopublic class Meme nto private Stri ng state;public Meme*to(Stri ng state) this.state = state;public String getState() *eturn state;public void setSt*te(Stri ng state) this.stat* = s*ate;Or*ginatorpublic class Ori
23、gin ator private Stri ng state;public Stri ng getState() return state;public void setState(Stri ng state) this.state = state;*ublic Meme nto createMeme nto() return new Meme nto(state);p*blic void setMeme nto(Meme nto meme*to) state = meme nto.ge*State();p*blic void showState() System.out.pri ntln(
24、state);Caretakerpublic class Caretaker p*ivate Meme nto meme nto;public Meme nto getMeme nto() return this.meme nto;public void setMeme nto(Meme nto meme nto) this.meme nto = meme nto;Testpublic class Test public static void main( Stri ng args) Origin ator org = *ew Origi nator(); org*setState("
25、; 開會中");C*retaker ctk = new Ca*etaker();ctk.setMemento(org.createMemento();將數據圭寸裝在 Caretakeror*.setState("睡覺中");org.sh*wState();*/顯示org.setMeme nto(ctk.getMeme nto();將數據重新導入or*.showState();result睡覺中開會中小結:備忘錄模式:備忘錄對象是一個用來存儲另外一個對象內部狀態(tài)的快照的對象。備忘錄模式的用意是在不破壞封裝的條件下,將一個對象的狀態(tài)捉住,并外部化,存儲起來,從而可 以
26、在將來合適的時候把這個對象還原到存儲起來的狀態(tài)。例如: (1 )同時跟幾個網友聊天時,一定要記清楚剛才跟網友說了些什么話,不然MM發(fā)現(xiàn)了會不高興的哦,幸虧我有個備忘錄,剛才與哪個網友說了什么話我都拷貝一份放到備忘錄里面保存,這樣可以隨時察 看以前的記錄啦。(2) 計算機設置還原點,當需要進行還原系統(tǒng)是就能一鍵還原了(3) 如果一個對象需要保存狀態(tài)并可通過undo或rollback等操作恢復到以前的狀態(tài)時,可以使用Memento模式。1) 一個類需要保存它的對象的狀態(tài)(相當于 Originator角色)2) 設計一個類,該類只是用來保存上述對象的狀態(tài)(相當于 Memento角色)3) 需要的時候
27、,Caretaker角色要求 Originator返回一個 Memento并加以保存4) undo或rollback操作時,通過 Caretaker保存的 Memento恢復Originator對象的狀態(tài)Memento模式比較簡單,我們只需要按照上面所介紹的步驟就可以實現(xiàn)Memento模式。例子代碼如下:public in terface Meme ntolF / 保存 Mementopublic class Caretaker private Meme ntolF m;public void saveMeme nto(Meme ntolF m) this.m = m;public Meme ntolF getMeme nto() return m;public class Origin ator /這是要保存的狀態(tài)private int state = 90;private Caretaker c = new Caretaker();/創(chuàng)建一個備忘錄角色,并將
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玉溪師范學院《高等代數》2021-2022學年第一學期期末試卷
- 玉溪師范學院《保教知識與能力》2023-2024學年第一學期期末試卷
- 2024年電熱毯項目建議書
- 2024融資租賃合同司法解釋(全文)
- 2024中國銀行信托投資公司外匯流動資金貸款合同
- 2024英文聘用合同(聘用外國人)
- 2024電子版?zhèn)€人代理合同樣書
- 2024贈與撤銷情況與合同范本
- 2024廣告合同樣本范文
- 5萬噸-年玻璃鋼固體廢物處理和綜合利用項目環(huán)評報告表
- 循證教學評價:數智化時代下高校教師教學評價的新取向
- (完整word版)兒童感覺統(tǒng)合能力發(fā)展評定量表
- 《各種管道的護理》PPT課件.ppt
- 世界500強企業(yè)簡要情況及在華機構聯(lián)系方式
- EDQM分析方法驗證指導原則
- 專題關于同一溶質不同濃度溶液混合的計算1
- 商城開發(fā)合同
- 220千伏變電站現(xiàn)場運行通用規(guī)程
- 海綿城市建設難點與對策
- 幼兒園《交通工具(火車篇)家長代課》PPT課件
- 我的叔叔于勒(劇本)精編版
評論
0/150
提交評論