Aha!設計模式 32 原型 6

2021-09-08 02:19:33 字數 1262 閱讀 9562

5) 用類動態配置應用

一些執行時刻環境允許你動態將類裝載到應用中。在像 c++這樣的語言中,prototype模式是利用這種功能的關鍵。

某些開發環境可以(例如通過系列化的方式)在程式執行的時侯載入類。這些類被載入以後的用法可分為兩種情況:直接使用和作為生成其他物件的模板。第二中方法的關鍵就是原型模式。

乙個希望建立動態載入類的例項的應用不能靜態引用類的構造器。而應該由執行環境在載入時自動建立每個類的例項,並用原型管理器來註冊這個例項(參見實現一節)。這樣應用就可以向原型管理器請求新裝載的類的例項,這些類原本並沒有和程式相連線。 et++應用框架[wgm88]有乙個執行系統就是使用這一方案的。

一般來講,被動態載入的類應該認為是事先定義好的基類的某種派生類。所以很可能沒辦法知道(也不應該知道)具體的型別。結果就是沒有辦法使用類的建構函式(即譯文中的構造器)。這個問題可以用原型模式來解決。

我們可以參照的word軟體中的相簿功能來理解這件事。

首先是載入相簿,也就是開啟相簿檔案操作。這個開啟檔案的過程實際上就是讀出儲存在檔案中的復合圖形資料並在記憶體中構建復合圖形例項的過程。這些復合圖形例項生成後登入到原型管理器上備用。當我們從相簿中選擇圖形時開啟的畫面中顯示的就是原型管理器中的圖形例項。

接下來,使用者會選擇某個圖形拖放到作圖區。這個操作從程式實現的角度來看就是向原型管理器請求復合圖形的新例項的過程。只要實現定義好合適的介面,word完全可以匯入在另外的地方定義的新類。這就保證的這個過程的擴充套件性。

prototype的主要缺陷是每乙個prototype的子類都必須實現clone操作,這可能很困難。例如,當所考慮的類已經存在時就難以新增clone操作。當內部包括一些不支援拷貝或有迴圈引用的物件時,實現轉殖可能也會很困難的。

轉殖方法作為原型模式中生成例項的手段,當然是需要代價的。考慮為某個已經存在的類群增加轉殖方法的情況:如果這個類群中每個類構成都不一樣,工作量就會很大;如果存在無法拷貝的資訊(例如指向拷貝範圍之外的引用)或迴圈引用,就需要更加細緻的整理和設計。

作者觀點

設計者在遇到上述問題時,正視技術/方法的優點和缺點並在實際工作中嘗試使用的決心和技能都是需要的。

注:

本文中藍色粗體文字都引自《設計模式》一書。

Aha!設計模式 7 抽象工廠 6

實 現 下面是實現abstract factor模式的一些有用技術 1 將工廠作為單件 乙個應用中一般每個產品系列只需乙個concretefactory的例項。因此工廠通常最好實現為乙個singleton 3.5 只有一句話,但是並沒有給出實現。為了說明這個問題,作者按照自己的理解,以前面提到的作業...

設計模式 6 原型模式

有時需要生成多個相同的物件,最普通的方法就是就是用相同的屬性new相同的物件 public class main class chicken 這樣做的缺點是,如果需要修改乙個屬性,其他物件的屬性就要跟著改一遍,有乙個便捷的方法,就是採用 原型模式,從乙個物件再建立另外乙個可定製的物件,不需要知道任何...

設計模式 6 原型模式

1996年7月5日,英國科學家伊恩 威爾穆特博士成功的轉殖出了乙隻小羊,小羊與它的 母親 一模一樣。這只小羊的名字就是dolly。dolly是由 不要認為介紹多莉轉殖的故事和本文牛頭不對馬嘴,事實上多少還是有點關係的。1.什麼是原型模式?原型模式就是用來建立重複的物件,再直白一點 複製貼上的原理。怎...