《java與模式》-10 原始模型模式

通過給出一個原型對象指明所要創建的對象的類型,然後複製這個對象創造出更多同類型的對象;
java 本身支持原始模型模式,Object有一個clone(),可以複製對象,但是要複製的話就必須要實現一個標誌接口Cloneable接口,否則的話會拋CloneNotSupportedException異常;

簡單形式的原始模型

客戶端角色:提出創建對象的請求。
抽象原型角色(Cloneable的子接口),具體原型角色(被複制對象);

登記形式的原始模型

客戶端角色,抽象原型角色,具體原型角色,原型管理器角色(創建具體原型類對象,並記錄保存每一個被創建的額對象);

如果要創建的原型數目較少並比較固定,可以採用簡單形式,如果對象數目不固定就採用登記形式;

深複製與淺複製:深複製就是將對象本身以及對象的引用全部複製(可能嵌套很多層),淺複製就是隻複製對象本身,不復制它的引用;

利用串行化做深複製

串行化:把對象寫到流裏的過程,又叫“冷凍”;
並行化:把對象重流中讀出來的過程,又叫“解凍”;
寫到流裏是對對象的拷貝,原對象依然在JVM中;
java裏深複製,常常可以先使對象實現Serializable接口,然後把對象寫入流中,再從流中讀出來便可以重建對象;
如果對象中有不可串行化的對象(例如Thread,Socket,流)需要transient修飾,排除在複製過程之外;

何時使用原始模型模式

加入一個系統的產品類是動態加載的,而且產品類有一定的等級結構,如果這時候採用工廠模式,工廠就不得不具有等級結構,對於產品結構經常變化的系統來說,採用工廠模式不方便。
這時採用原始模式給每一個產品類配一個clone方法(只需要根類配備就可以),就避免了工廠模式所帶來的具有固定結構的工廠類;
這樣一個原始模型的系統,與他的產品對象是怎麼創建出來的,以及產品對象之間的結構是怎樣的,以及這個結構會不會發生變化是沒有關係;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章