設計模式 原型模式深度理解淺拷貝深拷貝原理

2021-10-23 19:54:53 字數 2848 閱讀 6633

一,棧

二,堆

先看看什麼是棧,什麼是堆,至於為什麼要這裡開頭就講棧和堆的解釋,原因後在後面有解釋,請往下看,直接上例項:

淺拷貝例項:

//淺拷貝**

public

class

weekreport

implements

cloneable

,serializable

public

void

setemp

(string emp)

public string getsummary()

public

void

setsummary

(string summary)

public string getplain()

public

void

setplain

(string plain)

public string getsuggestion()

public

void

setsuggestion

(string suggestion)

public sysacsserver getsysacsserver()

public

void

setsysacsserver

(sysacsserver sysacsserver)

@override

public string tostring()

';}@override

protected object clone()

throws clonenotsupportedexception

}class

weektest}/*

這裡是native 關鍵字告訴編譯器(其實是jvm)呼叫的是該方法在外部定義,這裡指的是c。

呼叫本地方法且clone方法是直接複製記憶體中的二進位制。效率是非常高的。

clone方法,是不會引起構造器的呼叫的。

*/protected

native object clone()

throws clonenotsupportedexception;

輸出結果:false

weekreport

weekreport

輸出結果為false說明兩個類的記憶體位址是不相同的,等於說在copy的時候進行新開闢了乙個記憶體空間.

但是我們可以看到這裡有問題,引用的實體類在我copy以後wr2進行賦值123456789後,wr的引用實體類也一模一樣的變化了.

我們需要實現的是進行copy以後自己操作賦值,不要影響其他的宣告物件.

這裡就是淺拷貝的問題.為什麼會產生這樣的問題我們進行深入的討論.請看一下內容:

這裡我們講講理論方面的東西,先看看,後面會**細講:二、淺拷貝與深拷貝深拷貝和淺拷貝的示意圖大致如下:

三、賦值和淺拷貝的區別

通過深拷貝的方式例項:

//通過實現cloneable和序列化進行操作

public

class

weekreport

implements

cloneable

,serializable

public

void

setemp

(string emp)

public string getsummary()

public

void

setsummary

(string summary)

public string getplain()

public

void

setplain

(string plain)

public string getsuggestion()

public

void

setsuggestion

(string suggestion)

public sysacsserver getsysacsserver()

public

void

setsysacsserver

(sysacsserver sysacsserver)

@override

public string tostring()

';}@override

protected object clone()

throws clonenotsupportedexception

catch

(exception e)}}

class

weektest

輸出結果:

C 原型模式(深拷貝 淺拷貝)

建立原型 public abstract class base public int age public base public base string name,int age 深拷貝 public abstract base clone 淺拷貝 public abstract base mcl...

設計模式 拷貝和原型模式

我對於設計模式還是一知半解的,最近看了幾個設計模式,單例模式和工廠模式是比較基礎和簡單的,這裡我就不贅述了,但是他們是最為普遍的設計模式,不了解的小夥伴們還是去看看為好。關於拷貝,這篇文章寫得特別好,深入淺出。總結起來就是 類初始化的過程比作列印,拷貝的過程比作影印。類載入的過程很複雜,如果我們迴圈...

設計模式 原型模式介紹 原型模式的深拷貝問題

轉殖羊問題 有乙個羊,是乙個類,有對應的屬性,要求建立完全一樣的10隻羊出來。那麼實現起來很簡單,我們先寫出羊的類 public class sheep然後,建立10只一樣的羊,就在客戶端寫乙個 建立 原始羊 sheep sheep new sheep tom 1,白色 轉殖羊 sheep shee...