設計模式劉偉實驗答案_第1頁
設計模式劉偉實驗答案_第2頁
設計模式劉偉實驗答案_第3頁
設計模式劉偉實驗答案_第4頁
設計模式劉偉實驗答案_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、-. z.設計模式偉實驗參考答案實驗1 1在*圖形庫API 中提供了多種矢量圖模板,用戶可以基于這些矢量圖創(chuàng)立不同的顯示圖形,圖形庫設計人員設計的初始類圖如下所示:Circle+init ()setColor ()fill ()setSize ()display (): void void: void: void: void:Triangle+init ()setColor ()fill ()setSize ()display () void: void void: void: void:Rectangle+init ()setColor ()fill ()setSize ()display

2、() void: void: void: void: voidClient 在該圖形庫中,每個圖形類如Circle、Triangle 等的init()方法用于初始化所創(chuàng)立的圖形, setColor()方法用于給圖形設置邊框顏色,fill()方法用于給圖形設置填充顏色,setSize() 方法用于設置圖形的大小,display()方法用于顯示圖形??蛻纛?Client)在使用該圖形庫時發(fā)現(xiàn)存在如下問題:由于在創(chuàng)立窗口時每次只需要使用圖形庫中的一種圖形,因此在更換圖形時需要修改客戶類源代碼;在圖形庫中增加并使用新的圖形時需要修改客戶類源代碼;客戶類在每次使用圖形對象之前需要先創(chuàng)立圖形對象,有些圖形

3、的創(chuàng)立過程較為復雜,導致客戶類代碼冗長且難以維護?,F(xiàn)需要根據(jù)面向?qū)ο笤O計原則對該系統(tǒng)進展重構(gòu),要求如下:隔離圖形的創(chuàng)立和使用,將圖形的創(chuàng)立過程封裝在專門的類中,客戶類在使用圖形時無須直接創(chuàng)立圖形對象,甚至不需要關心具體圖形類類名;客戶類能夠方便地更換圖形或使用新增圖形,無須針對具體圖形類編程,符合開閉原則。繪制重構(gòu)之后的類圖并說明在重構(gòu)過程中所運用的面向?qū)ο笤O計原則。參考答案:2使用簡單工廠模式設計一個可以創(chuàng)立不同幾何形狀(Shape),如圓形(Circle)、矩形(Rectangle)和三角形(Triangle)等的繪圖工具類,每個幾何圖形均具有繪制draw()和擦除erase()兩個方法,

4、要求在繪制不支持的幾何圖形時,拋出一個UnsupportedShapeE*ception 異常,繪制類圖并編程模擬實現(xiàn)。參考答案:ShapeFactorycreateShape (String type): Shape+Circle+draw ()erase (): void: voidTriangle+draw ()erase (): void void:Shape+draw ()erase (): void: voidRectangle+draw ()erase (): void: voidUnsupportedShapeE*ception(+UnsupportedShapeE*cepti

5、on String message) 現(xiàn)需要設計一個程序來讀取多種不同類型的圖片格式,針對每一種圖片格式都設計一個圖片讀取器(ImageReader),如GIF 圖片讀取器(GifReader)用于讀取GIF 格式的圖片、JPG 圖片讀取器(JpgReader)用于讀取JPG 格式的圖片。圖片讀取器對象通過圖片讀取器工廠ImageReaderFactory 來創(chuàng)立,ImageReaderFactory 是一個抽象類,用于定義創(chuàng)立圖片讀取器的工廠方法,其子類GifReaderFactory 和JpgReaderFactory 用于創(chuàng)立具體的圖片讀取器對象。試使用工廠方法模式設計該程序,繪制類圖并

6、編程模擬實現(xiàn)。需充分考慮系統(tǒng)的靈活性和可擴展性。參考答案:GifReaderFactorycreateImageReader (): ImageReader+ImageReaderFactorycreateImageReader (): ImageReader+GifReader+readImage (): voidImageReader+readImage (): voidJpgReaderFactory+createImageReader (): ImageReaderJpgReader+readImage (): void *軟件公司欲開發(fā)一套界面皮膚庫,可以對桌面軟件進展界面美化。不同

7、的皮膚將提供視覺效果不同的按鈕、文本框、組合框等界面元素,其構(gòu)造如下列圖所示:該皮膚庫需要具備良好的靈活性和可擴展性,用戶可以自由選擇不同的皮膚,開發(fā)人員可以在不修改既有代碼的根底上增加新的皮膚。試使用抽象工廠模式設計該皮膚庫,繪制類圖并編程模擬實現(xiàn)。參考答案:使用單例模式的思想實現(xiàn)多例模式,確保系統(tǒng)中*個類的對象只能存在有限個,例如兩個或三個,設計并編寫代碼實現(xiàn)一個多例類。參考答案:Multiton- array : Multiton- Multiton ()+ getInstance () : Multiton+ random (): int多例模式(Multiton Pattern)是單

8、例模式的一種擴展形式,多例類可以有多個實例,而且必須自行創(chuàng)立和管理實例,并向外界提供自己的實例,可以通過靜態(tài)集合對象來存儲這些實例。多例類Multiton 的代碼如下所示:import java.util.*; public class Multiton /定義一個數(shù)組用于存儲四個實例 private static Multiton array = new Multiton(), new Multiton(), new Multiton(), new Multiton(); /私有構(gòu)造函數(shù) private Multiton() /靜態(tài)工廠方法,隨機返回數(shù)組中的一個實例 public stati

9、c Multiton getInstance() return arrayrandom(); /隨機生成一個整數(shù)作為數(shù)組下標 public static int random() Date d = new Date(); Random random = new Random(); int value = Math.abs(random.ne*tInt(); value = value % 4; return value; public static void main(String args) Multiton m1,m2,m3,m4; m1 = Multiton.getInstance();

10、 m2 = Multiton.getInstance(); m3 = Multiton.getInstance(); m4 = Multiton.getInstance(); System.out.println(m1=m2); System.out.println(m1=m3); System.out.println(m1=m4); 6. 使用單例模式設計一個多文檔窗口注:在Java AWT/Swing 開發(fā)中可使用JDesktopPane 和JInternalFrame 來實現(xiàn),要求在主窗體中*個部子窗體只能實例化一次,即只能彈出一個一樣的子窗體,如下列圖所示,編程實現(xiàn)該功能。注:用C#或

11、C+實現(xiàn)類似功能也可以參考答案:SubFrame-frame: SubFrame-+SubFrame ()getFrame (): SubFrameMyIFListenerMainClass-buttondesktopPaneiFrame: utton: JDesktopPane: SubFrame+()MainClass BtListener SubFrame 類充當單例類,在其中定義了靜態(tài)工廠方法getFrame()。代碼如下所示:import java.awt.*; import java.awt.event.*; import java*.swing.*; import java*.s

12、wing.event.*; /子窗口:單例類class SubFrame e*tends JInternalFrame private static SubFrame frame;/靜態(tài)實例 /私有構(gòu)造函數(shù) private SubFrame() super(子窗體, true, true, true, false); this.setLocation(20,20); /設置部窗體位置 this.setSize(200,200); /設置部窗體大小 this.addInternalFrameListener(new MyIFListener();/監(jiān)聽窗體事件 this.setVisible(t

13、rue); /工廠方法,返回窗體實例 public static SubFrame getFrame() /如果窗體對象為空,則創(chuàng)立窗體,否則直接返回已有窗體 if(frame=null) frame=new SubFrame(); return frame; /事件監(jiān)聽器 class MyIFListener e*tends InternalFrameAdapter /子窗體關閉時,將窗體對象設為null public void internalFrameClosing(InternalFrameEvent e) if(frame!=null) frame=null; /客戶端測試類clas

14、s MainClass e*tends JFrame private utton button; private JDesktopPane desktopPane; private SubFrame iFrame=null; public MainClass() super(主窗體); Container c=this.getContentPane(); c.setLayout(new BorderLayout(); button=new utton(點擊創(chuàng)立一個部窗體); button.addActionListener(new BtListener(); c.add(button, Bor

15、derLayout.SOUTH); desktopPane = new JDesktopPane(); /創(chuàng)立DesktopPane c.add(desktopPane); this.setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE); this.setLocationRelativeTo(null); this.setSize(400,400); this.show(); /事件監(jiān)聽器 class BtListener implements ActionListener public void actionPerformed(ActionEvent

16、e) if(iFrame!=null) desktopPane.remove(iFrame); iFrame=SubFrame.getFrame(); desktopPane.add(iFrame); public static void main(String args) new MainClass(); SubFrame 類是JInternalFrame 類的子類,在SubFrame 類中定義了一個靜態(tài)的SubFrame 類型的實例變量,在靜態(tài)工廠方法getFrame()中創(chuàng)立了SubFrame 對象并將其返回。在MainClass 類中使用了該單例類,確保子窗口在當前應用程序中只有唯一一

17、個實例,即只能彈出一個子窗口。實驗2 現(xiàn)有一個接口DataOperation 定義了排序方法sort(int) 和查找方法search(int, int),類QuickSort 的quickSort(int)方法實現(xiàn)了快速排序算法,類BinarySearch 的binarySearch(int, int)方法實現(xiàn)了二分查找算法。試使用適配器模式設計一個系統(tǒng),在不修改源代碼的情況下將類QuickSort 和類BinarySearch 的方法適配到DataOperation 接口中。繪制類圖并編程實現(xiàn)。要現(xiàn)快速排序和二分查找,使用對象適配器實現(xiàn)參考答案:OperationAdapter-sortO

18、bjsearchObj QuickSort: BinarySearch+OperationAdapter (QuickSort sortObj, BinarySearch searchObj)sort (int array)search (int array, int key): int: intDataOperation+sort (int array)search (int array, int key) int: intQuickSort+quickSort (int array)sort (int array, int p, int r)partition (int a, int p,

19、 int r)swap (int a, int i, int j) int: void: int: void:BinarySearch+binarySearch (int array, int key): intClient Windows Media Player 和RealPlayer 是兩種常用的媒體播放器,它們的API 構(gòu)造和調(diào)用方法存在區(qū)別?,F(xiàn)在你的應用程序需要支持這兩種播放器API,而且在將來可能還需要支持新的媒體播放器,請問如何設計該應用程序?繪制類圖并編程模擬實現(xiàn)。參考答案:可使用適配器模式和抽象工廠模式,參考類圖如下所示:MediaPlayerWindowMainWindow

20、MediaPlayerFactory+createMainWindow ()createPlayerList () MainWindow: PlayerList:PlayerFactory+createMainWindow ()createPlayerList (): MainWindow: PlayerListClientClassRealPlayerFactory+createMainWindow ()createPlayerList () MainWindow: PlayerListRealPlayerWindowMediaPlayerListPlayerListRealPlayerLi

21、stMediaPlayerAPIRealPlayerAPI 在該類圖中,為兩種不同的播放器提供了兩個具體工廠類MediaPlayerFactory 和RealPlayerFactory,其中MediaPlayerFactory 作為Windows Media Player 播放器工廠,可以創(chuàng)立Windows Media Player 的主窗口(MediaPlayerWindow)和播放列表(MediaPlayerList)為了簡化類圖,只列出主窗口和播放列表這兩個播放器組成元素,實際情況下包含更多組成元素;RealPlayerFactory 作為RealPlayer 播放器工廠,創(chuàng)立RealP

22、layer 的主窗口(RealPlayerWindow)和播放列表(RealPlayerList),此時可以使用抽象工廠模式,客戶端針對抽象工廠PlayerFactory 編程,如果增加新的播放器,只需增加一個新的具體工廠來生產(chǎn)新產(chǎn)品族中的產(chǎn)品即可。由于需要調(diào)用現(xiàn)有API 中的方法,因此還需要使用適配器模式,在具體產(chǎn)品類如MediaPlayerWindow 和MediaPlayerList 調(diào)用Windows Media Player API 中的方法,在RealPlayerWindow 和RealPlayerList 中調(diào)用RealPlayer API 中的方法,實現(xiàn)對API 中方法的適配,

23、此時具體產(chǎn)品如MediaPlayerWindow、RealPlayerWindow 等充當適配器,而已有的API 如MediaPlayerAPI 和RealPlayerAPI 是需要適配的適配者。使用組合模式設計一個殺毒軟件(AntiVirus)的框架,該軟件既可以對*個文件夾(Folder)殺毒,也可以對*個指定的文件(File)進展殺毒,文件種類包括文本文件Te*tFile、圖片文件ImageFile、視頻文件VideoFile。繪制類圖并編程模擬實現(xiàn)。參考答案:fileListAbstractFileabstract +add (AbstractFile file)remove (Abs

24、tractFile file)getChild (int i)killVirus () void: void AbstractFile: voidImageFilename: String-+ImageFile (String name)add (AbstractFile file)remove (AbstractFile file)getChild (int i)killVirus () void: void AbstractFile: void:Folder-fileListname ArrayList: String:+Folder (String name)add (AbstractF

25、ile file)remove (AbstractFile file)getChild (int i)killVirus (): void void: AbstractFile: voidTe*tFile-name: String+Te*tFile (String name)add (AbstractFile file)remove (AbstractFile file)getChild (int i)killVirus () void: void AbstractFile: void:VideoFilename: String-+VideoFile (String name)add (Abs

26、tractFile file)remove (AbstractFile file)getChild (int i)killVirus () void: void: AbstractFile void: *教育機構(gòu)組織構(gòu)造如下列圖所示:總部教務辦公室*分校行政辦公室*教學點*教學點教務辦公室行政辦公室教務辦公室行政辦公室教務辦公室行政辦公室在該教育機構(gòu)的OA 系統(tǒng)中可以給各級辦公室下發(fā)公文,試采用組合模式設計該機構(gòu)的組織構(gòu)造,繪制相應的類圖并編程模擬實現(xiàn),在客戶端代碼中模擬下發(fā)公文。參考答案:參考類圖如下所示:listUnitabstract +handleArchives (): voidOf

27、ficename: String-+Office (String name)handleArchives (): voidInstitution-listname: ArrayList: String+Institution (String name)add (Unit unit)handleArchives (): void: void 本實例使用了平安組合模式,Unit 充當抽象構(gòu)件角色,Office 充當葉子構(gòu)件角色,Institution 充當容器構(gòu)件角色。本實例代碼如下所示:abstract class Unit public abstract void handleArchives

28、(); class Office e*tends Unit private String name; public Office(String name) = name; public void handleArchives() System.out.println( + 處理公文!); class Institution e*tends Unit private ArrayList list = new ArrayList(); private String name; public Institution(String name)

29、= name; public void add(Unit unit) list.add(unit); public void handleArchives() System.out.println( + 接收并下發(fā)公文:); for(Object obj : list) (Unit)obj).handleArchives(); 在客戶類中創(chuàng)立樹形構(gòu)造,代碼如下所示:class Client public static void main(String args) Institution bjHeadquarters,hnSubSchool,csTeachingPost,*tT

30、eachingPost; Unit tOffice1,tOffice2,tOffice3,tOffice4,aOffice1,aOffice2,aOffice3,aOffice4; bjHeadquarters = new Institution(總部); hnSubSchool = new Institution(分校); csTeachingPost = new Institution(教學點); *tTeachingPost = new Institution(教學點); tOffice1 = new Office(教務辦公室); tOffice2 = new Office(教務辦公室)

31、; tOffice3 = new Office(教務辦公室); tOffice4 = new Office(教務辦公室); aOffice1 = new Office(行政辦公室); aOffice2 = new Office(行政辦公室); aOffice3 = new Office(行政辦公室); aOffice4 = new Office(行政辦公室); csTeachingPost.add(tOffice3); csTeachingPost.add(aOffice3); *tTeachingPost.add(tOffice4); *tTeachingPost.add(aOffice4)

32、; hnSubSchool.add(csTeachingPost); hnSubSchool.add(*tTeachingPost); hnSubSchool.add(tOffice2); hnSubSchool.add(aOffice2); bjHeadquarters.add(hnSubSchool); bjHeadquarters.add(tOffice1); bjHeadquarters.add(aOffice1); bjHeadquarters.handleArchives(); 注:此題也可以將員工(Employee)作為葉子構(gòu)件,將Unit 作為容器構(gòu)件。*軟件公司為新開發(fā)的智能

33、手機控制與管理軟件提供了一鍵備份功能,通過該功能可以將原本存儲在手機中的通信錄、短信、照片、歌曲等資料一次性全部拷貝到移動存儲介質(zhì)例如MMC 卡或SD 卡中。在實現(xiàn)過程中需要與多個已有的類進展交互,例如通訊錄管理類、短信管理類等,為了降低系統(tǒng)的耦合度,試使用外觀模式來設計并編程模擬實現(xiàn)該一鍵備份功能。參考答案:參考類圖如下所示:OneKeyBackup-cmmmfm ContactManager: MessageManager: FileManager+click (): voidContactManager+backup (): voidMessageManager+backup (): v

34、oidFileManager+backup (): void 其中,OneKeyBackup 充當外觀角色,ContactManager、MessageManager 和FileManager 充當子系統(tǒng)角色。*信息系統(tǒng)需要提供一個數(shù)據(jù)處理和報表顯示模塊,該模塊可以讀取不同類型的文件中的數(shù)據(jù)并將數(shù)據(jù)轉(zhuǎn)換成*ML 格式,然后對數(shù)據(jù)進展統(tǒng)計分析,最后以報表方式來顯示數(shù)據(jù)。由于該過程需要涉及到多個類,試使用外觀模式設計該數(shù)據(jù)處理和報表顯示模塊??紤]到有些文件本身已經(jīng)是*ML 格式,無須進展格式轉(zhuǎn)換,為了讓系統(tǒng)具有更好的擴展性,在系統(tǒng)設計中可以引入抽象外觀類。參考答案:AbstractFacadeab

35、stract +()e*ecute *MLFacade+e*ecute ()E*tendedFacade+e*ecute ()FileOperation+read ()*MLDataConvertor+convert ()ReportDisplay+display ()DataAnalysis()+handle 實驗3 在*應用軟件中需要記錄業(yè)務方法的調(diào)用日志,在不修改現(xiàn)有業(yè)務類的根底上為每一個類提供一個日志記錄代理類,在代理類中輸出日志,例如在業(yè)務方法method()調(diào)用之前輸出方法method()被調(diào)用,調(diào)用時間為2014-11-5 10:10:10,調(diào)用之后如果沒有拋異常則輸出方法met

36、hod()調(diào)用成功,否則輸出方法method()調(diào)用失敗。在代理類中調(diào)用真實業(yè)務類的業(yè)務方法,使用代理模式設計該日志記錄模塊的構(gòu)造,繪制類圖并編程模擬實現(xiàn)。參考答案:BusinessClassmethod (): void+AbstractLog+method (): voidLoggerPro*y-business: BusinessClass+LoggerPro*y ()method (): voidClient *軟件公司承接了*信息咨詢公司的收費商務信息查詢系統(tǒng)的開發(fā)任務,該系統(tǒng)的根本需求如下:在進展商務信息查詢之前用戶需要通過身份驗證,只有合法用戶才能夠使用該查詢系統(tǒng);在進展商務信息

37、查詢時系統(tǒng)需要記錄查詢?nèi)罩?,以便根?jù)查詢次數(shù)收取查詢費用。該軟件公司開發(fā)人員已完成了商務信息查詢模塊的開發(fā)任務,現(xiàn)希望能夠以一種松耦合的方式向原有系統(tǒng)增加身份驗證和日志記錄功能,客戶端代碼可以無區(qū)別地對待原始的商務信息查詢模塊和增加新功能之后的商務信息查詢模塊,而且可能在將來還要在該信息查詢模塊中增加一些新的功能。試使用代理模式設計并編程模擬實現(xiàn)該收費商務信息查詢系統(tǒng)?!咎崾荆菏褂帽Wo代理和智能引用代理】參考答案:Pro*ySearcher-searchervalidatorlogger: RealSearcher AccessValidator: Logger:+doSearch ()val

38、idate ()log () String: boolean: void:Searcher+doSearch (): StringRealSearcherdoSearch (): String+AccessValidator+validate (): booleanLogger+log (): void *企業(yè)的SCM(Supply Chain Management,供給鏈管理)系統(tǒng)中包含一個采購審批子系統(tǒng)。該企業(yè)的采購審批是分級進展的,即根據(jù)采購金額的不同由不同層次的主管人員來審批,主任可以審批5 萬元以下不包括5 萬元的采購單,副董事長可以審批5 萬元至10 萬元不包括10 萬元的采購單,

39、董事長可以審批10 萬元至50 萬元不包括50 萬元的采購單,50 萬元及以上的采購單就需要開董事會討論決定。如下列圖所示:參考答案:successorApproverabstract #successorname: Approver: String+Approver (String name)setSuccessor (Approver successor)processRequest (PurchaseRequest request): void: voidDirector+Director (String name)processRequest (PurchaseRequest requ

40、est): voidCongress+Congress (String name)processRequest (PurchaseRequest request): voidPurchaseRequest-amountnumberpurpose: double: int: String+PurchaseRequest (double amount, int number, String purpose)setAmount (double amount)getAmount ()setNumber (int number)getNumber ()setPurpose (String purpose

41、)getPurpose (): void double: void: int: void: StringVicePresident+VicePresident (String name)processRequest (PurchaseRequest request): voidPresident+President (String name)processRequest (PurchaseRequest request): void *公司欲開發(fā)一個軟件系統(tǒng)的在線文檔幫助系統(tǒng),用戶可以在任何一個查詢上下文中輸入查詢關鍵字,如果當前查詢環(huán)境下沒有相關容,則系統(tǒng)會將查詢按照一定的順序轉(zhuǎn)發(fā)給其他查詢

42、環(huán)境。基于上述需求,試采用職責鏈模式對該系統(tǒng)進展設計。參考答案:successorSearchConte*tabstract #successor: SearchConte*t+setSuccessor (SearchConte*t successor)search (String keyword): void: voidJavaSearchConte*t+search (String keyword): voidUMLSearchConte*t+search (String keyword): voidClientSQLSearchConte*t+search (String keyword

43、): void 房間中的開關就是命令模式的一個實例,現(xiàn)用命令模式來模擬開關的功能,可控制對象包括電燈和電風扇,繪制相應的類圖并編程模擬實現(xiàn)。參考答案:參考類圖如下所示:lampfanSwitch+on ()off () void: void:mand+e*ecuteOn ()e*ecuteOff (): void: voidLampmand-lamp: Lamp+e*ecuteOn ()e*ecuteOff (): void: voidLamp+lighten ()quench (): void: voidFanmand-fan: Fan+e*ecuteOn ()e*ecuteOff ():

44、void: voidFan+run ()stop (): void: void 其中,Switch 充當調(diào)用者發(fā)送者角色,mand 是抽象命令類,Lampmand 和Fanmand 充當具體命令角色,Lamp 和Fan 充當接收者角色。*軟件公司欲開發(fā)一個基于Windows 平臺的公告板系統(tǒng)。系統(tǒng)提供一個主菜單(Menu),在主菜單中包含了一些菜單項(MenuItem),可以通過Menu 類的addMenuItem()方法增加菜單項。菜單項的主要方法是click(),每一個菜單項包含一個抽象命令類,具體命令類包括Openmand(翻開命令),Createmand(新建命令),Editmand(

45、編輯命令)等,命令類具有一個e*ecute()方法,用于調(diào)用公告板系統(tǒng)界面類(BoardScreen)的open()、create()、edit()等方法。現(xiàn)使用命令模式設計該系統(tǒng),使得MenuItem 類與BoardScreen 類的耦合度降低,繪制類圖并編程實現(xiàn)。參考答案:BoardScreen-menu: Menu+BoardScreen ()display ()open ()create ()edit (): void: void: void: voidMenu+itemList: ArrayListaddMenuItem (MenuItem item): void+MenuItem-

46、namemand: String: mand+MenuItem (String name)getName ()setName (String name)getmand ()setmand (mand mand)click (): String: void: mand: void void:mand+e*ecute (): voidOpenmand-screen: BoardScreen+Openmand (BoardScreen screen):e*ecute () voidCreatemand-screen: BoardScreen+Createmand (BoardScreen scree

47、n)e*ecute (): voidEditmand-screen: BoardScreen+Editmand (BoardScreen screen) voide*ecute (): 其中,BoardScreen 充當接收者角色,MenuItem 充當調(diào)用者角色,mand 充當抽象命令角色,Openmand、Createmand 和Editmand 充當具體命令角色。實驗4 *實時在線股票軟件需要提供如下功能:當股票購置者所購置的*支股票價格變化幅度到達5%時,系統(tǒng)將自動發(fā)送通知包括新價格給購置該股票的所有股民。試使用觀察者模式設計并實現(xiàn)該系統(tǒng),要求繪制相應的類圖并編程模擬實現(xiàn)。參考答案:i

48、nvestorsConcreteInvestorname: String-+ConcreteInvestor (String name) voidresponse (Stock stock):Investor+response (Stock stock): voidStock-investorsstockNameprice: ArrayList: String double:+Stock (String stockName, double price)attach (Investor investor)detach (Investor investor)setStockName (String

49、 stockName)getStockName ()setPrice (double price)getPrice ()notifyInvestor (): void: void: void: String: void: double: void *公司欲開發(fā)一套機房監(jiān)控系統(tǒng),如果機房到達*一指定溫度,溫度傳感器(Thermosensor)將自動傳遞信號給各種響應設備,例如警示燈(CautionLight)將閃爍(flicker()、報警器(Annunciator)將發(fā)出警報(alarm()、平安逃生門(SecurityDoor)將自動開啟(open()、隔熱門(InsulatedDoor)將自動關閉(close()等,每一種響應設備的行為由專門的程序來控制。為了將來能夠方便地引入新類型的響應設備,采用觀察者模式和適配器模式設計并模擬實現(xiàn)該系統(tǒng)。參考答案:ThermoSensoralarmListeners: AlarmListener-+register (AlarmListener alarmListener)trigger (

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論