版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軟件體系結(jié)構(gòu) 姓名: 學(xué)號(hào): 130511XXXX 班級(jí): 軟工1302班 2016年5月16號(hào)1、 Flyweight設(shè)計(jì)模式享元模式運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象。案例: 模式的結(jié)構(gòu)中包括三種角色享元接口(Flyweight) 具體享元(Concrete Flyweight) 享元工廠(Flyweight Factory) 享元接口(Flyweight): Flyweight.javapublic interface Flyweight public double getHeight(); public double getWidth(); public double getLen
2、gth(); public void printMess(String mess); 享元工廠(FlyweightFactory): FlyweightFactory.javaimport java.util.HashMap;public class FlyweightFactory private HashMap<String,Flyweight> hashMap; static FlyweightFactory factory=new FlyweightFactory(); private FlyweightFactory() hashMap=new HashMap<St
3、ring,Flyweight>(); public static FlyweightFactory getFactory() return factory; public synchronized Flyweight getFlyweight(String key) if(hashMap.containsKey(key) return hashMap.get(key); else double width=0,height=0,length=0; String str=key.split("#"); width=Double.parseDouble(str0); he
4、ight=Double.parseDouble(str1); length=Double.parseDouble(str2); Flyweight ft=new ConcreteFlyweight(width,height,length); hashMap.put(key,ft); return ft; 具體享元: ConcreteFlyweight.javaclass ConcreteFlyweight implements Flyweight private double width; private double height; private double length; privat
5、e ConcreteFlyweight(double width,double height,double length) this.width=width; this.height=height; this.length=length; public double getHeight() return height; public double getWidth() return width; public double getLength() return length; public void printMess(String mess) System.out.print(mess);
6、System.out.print(" 寬度:"+width); System.out.print(" 高度:"+height); System.out.println("長(zhǎng)度:"+length); 應(yīng)用: Application.javapublic class Application public static void main(String args) FlyweightFactory factory=FlyweightFactory.getFactory(); double width=1.82,height=1.47,len
7、gth=5.12; String key=""+width+"#"+height+"#"+length; Flyweight flyweight=factory.getFlyweight(key); Car audiA6One=new Car(flyweight,"奧迪A6","黑色",128); Car audiA6Two=new Car(flyweight,"奧迪A6","灰色",160); audiA6One.print(); audiA6Two.p
8、rint(); width=1.77; height=1.45; length=4.63; key=""+width+"#"+height+"#"+length; flyweight=factory.getFlyweight(key); Car audiA4One=new Car(flyweight,"奧迪A4","藍(lán)色",126); Car audiA4Two=new Car(flyweight,"奧迪A4","紅色",138); flyweight.p
9、rintMess(" 名稱:奧迪A4 顏色:藍(lán)色 功率:126"); flyweight.printMess(" 名稱:奧迪A4 顏色:紅色 功率:138"); 運(yùn)行結(jié)果:2、 Chain of Responsibility設(shè)計(jì)模式責(zé)任鏈模式使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)象處理它為止。案例:用戶提交一個(gè)人的身份證號(hào)碼,想知道該人是在北京、上?;蛘咛旖蚓幼 DJ降慕Y(jié)構(gòu)中包括兩種角色處理者(Handler)具體處理者(ConcreteHandler)處理者(H
10、andler): Handler.javapublic interface Handler public abstract void handleRequest(String number); public abstract void setNextHandler(Handler handler);具體處理者(ConcreteHandler): Beijing.javaimport java.util.*;public class Beijing implements Handler private Handler handler; /包含下一個(gè)Handler對(duì)象 private ArrayL
11、ist<String> numberList; Beijing() numberList=new ArrayList<String>(); numberList.add("11129812340930034"); numberList.add("10120810340930632"); numberList.add("22029812340930034"); numberList.add("32620810340930632"); public void handleRequest(Stri
12、ng number) if(numberList.contains(number) System.out.println("該人在北京居住"); else System.out.println("該人不在北京居住"); if(handler!=null) handler.handleRequest(number); public void setNextHandler(Handler handler) this.handler=handler; 具體處理者(ConcreteHandler): Shanghai.javaimport java.util.*
13、;public class Shanghai implements Handler private Handler handler; private ArrayList<String> numberList; Shanghai() numberList=new ArrayList<String>(); numberList.add("34529812340930034"); numberList.add("98720810340430632"); numberList.add("36529812340930034&quo
14、t;); numberList.add("77720810340930632"); public void handleRequest(String number) if(numberList.contains(number) System.out.println("該人在上海居住"); else System.out.println("該人不在上海居住"); if(handler!=null) handler.handleRequest(number); public void setNextHandler(Handler hand
15、ler) this.handler=handler; 具體處理者(ConcreteHandler): Tianjin.javaimport java.util.*;public class Tianjin implements Handler private Handler handler; private ArrayList<String> numberList; Tianjin() numberList=new ArrayList<String>(); numberList.add("10029812340930034"); numberList
16、.add("20020810340430632"); numberList.add("30029812340930034"); numberList.add("50020810340930632"); public void handleRequest(String number) if(numberList.contains(number) System.out.println("該人在天津居住"); else System.out.println("該人不在天津居住"); if(handle
17、r!=null) handler.handleRequest(number); public void setNextHandler(Handler handler) this.handler=handler; 應(yīng)用 Application.javapublic class Application private Handler beijing,shanghai,tianjin; public void createChain() beijing=new Beijing(); shanghai=new Shanghai(); tianjin=new Tianjin(); beijing.set
18、NextHandler(shanghai); shanghai.setNextHandler(tianjin); public void reponseClient(String number) beijing.handleRequest(number); public static void main(String args) Application application=new Application(); application.createChain(); application.reponseClient("77720810340930632"); 運(yùn)行結(jié)果:3
19、、 Command設(shè)計(jì)模式命令模式(別名:動(dòng)作,事務(wù)) 將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可撤消的操作。案例:在軍隊(duì)作戰(zhàn)中,指揮官請(qǐng)求三連偷襲敵人,但是指揮官不希望或無法直接與三連取得聯(lián)系,那么可以將該請(qǐng)求:“三連偷襲敵人”形成一個(gè)“作戰(zhàn)命令”。只要能讓該作戰(zhàn)命令被執(zhí)行,就會(huì)實(shí)現(xiàn)三連偷襲敵人的目的。模式的結(jié)構(gòu)中包括四種角色接收者(Receiver):實(shí)現(xiàn)與執(zhí)行一個(gè)請(qǐng)求相關(guān)的操作 。請(qǐng)求者(Invoker):要求該命令執(zhí)行這個(gè)請(qǐng)求 。命令( Command ):聲明執(zhí)行操作的接口。 具體命令(ConcreteCommand):將一個(gè)接收者對(duì)象綁定于一個(gè)動(dòng)作。調(diào)用接收者相應(yīng)的操作,以實(shí)現(xiàn)Execute。接收者(Receiver) : CompanyArmy.javapublic class CompanyArmy public void sneakAttack() System.out.println("我們知道如何偷襲敵人,保證完成任務(wù)"); 命令(Command)接口 : Command.javapublic interface Command public abstract void execute();具體命令(ConcreteCommand) Conc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年檢重秤資金籌措計(jì)劃書
- 2023年血氧飽和度分析儀資金籌措計(jì)劃書
- 北京海淀2025屆高三下學(xué)期期初考試生物試題含附加題含解析
- 安徽省皖西南聯(lián)盟2025年高三三月(在線)模擬考試生物試題試卷含解析
- 2023年藥用粉碎機(jī)械資金籌措計(jì)劃書
- 安徽省阜陽市臨泉縣一中2025年高三模擬(最后一次)生物試題含解析
- 2025年浙江省紹興市諸暨市高三3月調(diào)研考試生物試題含附加題含解析
- 2025年西安市慶安初級(jí)中學(xué)高三下學(xué)期網(wǎng)上授課階段考試生物試題含解析
- 2025年四川省巴中市高三下學(xué)期期中考試生物試題理試題(實(shí)驗(yàn)班)含解析
- 2025年陜西省澄城縣城關(guān)中學(xué)高三第二學(xué)期期末試生物試題含解析
- GB/T 26310.3-2010原鋁生產(chǎn)用煅后石油焦檢測(cè)方法第3部分:表觀油含量的測(cè)定加熱法
- 第一章-戰(zhàn)略與戰(zhàn)略管理
- GB/T 17626.2-2018電磁兼容試驗(yàn)和測(cè)量技術(shù)靜電放電抗擾度試驗(yàn)
- 量子精密測(cè)量在電磁場(chǎng)應(yīng)用
- 項(xiàng)目履約風(fēng)險(xiǎn)和投訴管理辦法
- 渝北SM城市廣場(chǎng)調(diào)研報(bào)告
- 醫(yī)防融合培訓(xùn)測(cè)試卷附答案
- 憲法(第二版)課件第2章
- 巧克力概述課件
- 小學(xué)語文人教三年級(jí)上冊(cè) 《總也倒不了的老屋》 省一等獎(jiǎng)?wù)n件
- 《月光下的中國(guó)》朗誦稿
評(píng)論
0/150
提交評(píng)論