大仁科技大学软体工程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大仁科技大学软体工程

大 仁 科 技 大 學 軟 體 工 程 題目: Design Patterns報告作業 之 ? Flyweight、Memento 指導老師:黃薰慧 老師 科 系:二技資管 2-1 姓 名:劉秀婷 4號 鄭合頡 30號 模式名稱:Flyweight 說明: 以共享機制有效地支援一大堆小規模的物件。運用共用技術,使得一些細粒度的物件可以共用。避免大量擁有相同內容的小類的開銷(如耗費記憶體),使大家共用一個類(元類)。   在Flyweight模式中,由於要產生各種各樣的對象,所以在Flyweight(享元)模式中常出現Factory模式。Flyweight的內部狀態是用來共享,Flyweight factory負責維護一個對象存儲池(Flyweight Pool)來存放內部狀態的對象。Flyweight模式是一個提高程式效率和性能的模式,會大大加快程式的運行速度。應用場合很多:比如你要從一個資料庫中讀取一系列字串,這些字串中有許多是重複的,那麼我們可以將這些字串儲存在Flyweight池(pool)中。 問題描述: 有些應用程式會因到處使用物件而獲益,但若不審慎使用也會造成沉重負擔。 在面向物件系統的設計何實現中,創建物件是最為常見的操作。這裏面就有一個問題:如果一個應用程式使用了太多的物件,就會造成很大的存儲開銷。特別是對於大量羽量級(細粒度)的物件,比如在文檔編輯器的設計過程中,我們如果為沒有字母創建一個物件的話,系統可能會因為大量的物件而造成存儲開銷的浪費。在這種情況我們可以為將物件的狀態分為“外部狀態”和“內部狀態”,將可以被共用(不會變化)的狀態作為內部狀態存儲在物件中,而外部物件(例如上面提到的字體、大小等)我們可以在適當的時候將外部物件最為參數傳遞給物件(例如在顯示的時候,將字體、大小等資訊傳遞給物件)。當然可能也有不想被共用的物件(例如結構圖中的UnshareConcreteFlyweight)。 解決方案描述: 上面解決問題的方式被稱作Flyweight模式解決上面的問題,其典型的結構圖為: 可以從圖Flyweight Pattern中看出,Flyweight模式中有一個類似Factory模式的物件構造工廠FlyweightFactory,當客戶程式師(Client)需要一個物件時候就會向FlyweightFactory發出請求物件的消息GetFlyweight()消息,FlyweightFactory擁有一個管理、存儲物件的“倉庫”(或者叫物件池,vector實現),GetFlyweight()消息會遍曆物件池中的物件,如果已經存在則直接返回給Client,否則創建一個新的物件返回給Client。 模式名稱:Memento 說明: 在不違反封裝性的前提下,捕捉物件的內部狀態並存在外面,以便日後回復至此一狀態。 問題描述: 有時我們需要記錄物件的內部狀態,譬如說:取消動作的復原機制,或者修復錯誤回到前一個查核點(checkpoint),都需要先將物件狀態另存某處,才將物件弄回前一個狀態。可是物件通常都會將部份狀態封裝起來不讓外界觸碰,也無法存到外面;如果硬將內部狀態曝光,又會違反封裝性,有損應用程式的穩固及擴充能力。 解決方案: Memento ---存放Originator物件的內部狀態。存放資訊的多寡,要視Originator的狀況而定。 ---避免Originator以外的人存取它。基本上Memento具有兩種介面:Caretaker只看得到窄介面—只能將Memento整個遞給其他物件;Originator就能看到寬介面—可存取所有資料,以便回復至前一狀態。理論上,只有產生這個Memento物件的那個Originator才有權存取內部狀態。 Originator ---根據自己的現行狀態建立Memento物件。 ---利用Memento回復自己的內部狀態。 Caretaker ---負責Memento物件的安全。 ---絕不會操弄或檢視Memento的內容。 UML圖: 結果: Memento模式的效果有: 維持封裝界線。Memento避免將只有Originator才能看到(但又不能置放在Originator裡面)的資訊曝露給第三者知道,又能讓第三者持有Memento物件。此模式將其他物件隔離在複雜的Originator內部細節之外,維持封裝的界線。 可簡化Originator。如果是用其他設計方法,為了維持封裝性,Originator必須自己記錄外界可能需要用到的所有內部狀態版本,但這會讓Originator背負過重的儲存管理責任。如果改由客戶碼來管理它想要的狀態,可簡化Originator,在事情做完之後也不必再通知Originator一聲。 Memento可能

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档