設計模式 原型模式(包含深淺拷貝的問題)

2021-09-25 16:28:07 字數 1161 閱讀 4776

當我看到prototype的時候,感覺特別熟悉,對,用過spring的同學都知道,配置spring bean的時候,其中有一項是scope配置,乙個是singleton乙個是prototype,對就是這個prototype。spring這裡就用到了原型設計模式

下面具體講一下:

什麼叫原型設計模式,通俗點就是轉殖,沒錯就是object裡的那個clone方法,假如有這麼乙個物件,現在怎麼用一般方法實現呢:

對就這樣,看起來很好理解,就是**也太多了,看起來就很low

用clone方法就可以直接轉殖了。 看起來很方便。

但是當用clone的時候,注意要轉殖的類要實現cloneable,不然拋異常。

而且這個方法涉及乙個深淺轉殖的問題,

這是什麼?

深轉殖就是跟原型除了長得一樣,但是是兩個完全不一樣的物件。

淺轉殖就是不僅長得一樣,引用位址都一樣。

舉個例子,你把sheep中加乙個物件,在用clone之後,前後用列印出位址看下,基本型別包含包裝型別以及string是相等的,但是你加的那個物件的位址不一樣,說明原生clone是淺拷貝。

要想實現深拷貝,實現方式有兩種,一種是序列化 一種是重寫clone

//深拷貝 - 方式1 通過物件的序列化實現 (推薦)

public object deepclone()

catch

(exception e)

finally

catch

(exception e2)

}}

//深拷貝 - 方式 2 使用clone 方法

@override

protected object clone()

throws clonenotsupportedexception

注意以後面試官問原生是深淺拷貝的時候可別打錯了呦~

設計模式 拷貝和原型模式

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

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

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

設計模式(五) 拷貝複製 原型模式

原型模式 prototype pattern 是用於建立重複的物件,同時又能保證效能。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。其實所謂的原型模式本質上是在勒種預留的對物件的複製介面。對於一些初始化資訊發生變化不大的情況下,可以採用clone的方式建立物件,不用每次都是重新初...