Java23種設計模式 原型模式

2021-08-10 22:14:37 字數 2080 閱讀 9419

該系列文章為博主學習筆記,原文請參考參考鏈結

這裡的轉殖方法分為兩種:

1、呼叫父類的轉殖方法

該物件應該實現cloneable介面,在轉殖方法中呼叫super.clone()方法,返回乙個全新的物件,改方法屬於淺轉殖。

2、在該物件中實現serializable介面,在轉殖方法中運用序列化和反序列化生產乙個全新的物件,該方法屬於深度轉殖。

淺轉殖和深轉殖簡單的來講:是否支援引用型別成員變數的複製。

對於int、double等成員變數,深轉殖和淺轉殖都是將值複製乙份。

而對於引用型別的成員變數,例如類、介面等等,淺轉殖複製出來的新物件跟原有物件還是共享同乙個記憶體位址。如果複製的物件更改了值,那麼原來物件的值也會被更改。所以我建議使用深轉殖。

**如下:

public

class

customer

implements

serializable

public

void

setaddress(address address)

public string getname()

public

void

setname(string name)

public

intgetage()

public

void

setage(int age)

public customer deepclone() throws ioexception, classnotfoundexception

}

public

class

address

implements

serializable

public

void

setadress(string adress)

}

public

class myclass catch (ioexception e) catch (classnotfoundexception e)

system.out.println(customer == deepclone);

system.out.println(customer.getaddress() == deepclone.getaddress());}}

輸出:

false

false

這裡使用了深轉殖,不僅被轉殖物件要實現serializable介面,同時該物件裡面的引用物件address類也要實現serializable介面。

如果我們換成實現cloneable介面,我們對customer類進行如下更改:

public

class

customer

implements

cloneable

public

void

setaddress(address address)

public string getname()

public

void

setname(string name)

public

intgetage()

public

void

setage(int age)

public customer deepclone() throws ioexception, classnotfoundexception catch (clonenotsupportedexception e)

return (customer) clone;}}

輸出:

false

true

可以看到通過實現cloneable介面,當被複製的類中有引用物件時,複製完之後的物件和複製之前的物件他們的記憶體位址是一樣的。

qq群:365473065

Java23種設計模式

定義 設計模式 design pattern 是一套反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。單例模式,特點 全域性只有乙個例項。定義 單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式的時候,單例物件的類必須...

Java23種設計模式

建立型模式,共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。結構型模式,共七種 介面卡模式 裝飾器模式 模式 外觀模式 橋接模式 組合模式 享元模式。行為型模式,共十一種 策略模式 模板方法模式 觀察者模式 迭代子模式 責任鏈模式 命令模式 備忘錄模 式 狀態模式 訪問者模式 中...

Java 23種設計模式

型別 模式建立型工廠模式 抽象工廠模式 單例模式 建造者模式 原型模式 結構型介面卡模式 橋接模式 組合模式 外觀模式 裝飾者模式 享元模式 模式 行為型責任鏈模式 命令模式 直譯器模式 迭代模式 中介者模式 備忘錄模式 觀察者模式 狀態模式 策略模式 模板方法模式 訪問者模式 模式說明 工廠模式 ...