原型設計模式

2021-10-16 01:58:30 字數 1290 閱讀 7775

什麼是原型設計模式:其實說的就是物件的轉殖什麼是物件的轉殖:就是不走構造方法,將記憶體裡的二進位制複製乙份,由其他引用指向

為什麼需要轉殖物件,而不是重新new乙個呢?

有的物件建立比較麻煩,效率低

保護性拷貝,多個地方需要用到同一類的例項,並且有可能對物件進行修改,但是我們並不希望這些修改會互相影響,當然重新new也行,看哪種效率比較高

轉殖乙個物件簡單的處理方法就是呼叫類的構造方法,然後將當前物件的各個屬性當做引數傳進構造方法裡,得到乙個各個屬性和原來物件一樣的物件

當這個類新增或者刪去了某個屬性的時候,就會很麻煩,每個用到的地方都要該**

原型設計模式就是讓類自己提供轉殖方法(也就是將轉殖這個職責歸於類本身,而不是交由外界去決定如何轉殖

外界僅僅需要呼叫轉殖方法,具體的實現不用關心,這樣一來,當類發生了改變或者轉殖的實現需要調整的話,需要進行維護的是類本身,其他所有的呼叫方**無需改變,符合開閉原則

但這並不意味這外界不可以用第二點那樣子去進行物件的轉殖,只是說類本身提供並且維護了一種轉殖方法

缺點 要求類都提供乙個轉殖方法,如果類原來沒有提供,那麼需要後期補上,不能直接使用,違反了開閉原則如果使用的是clone方法的話,那麼構造方法是不會執行的,這個需要注意

深淺拷貝

區別就是:對於引用型別,其指向的記憶體有沒有重新複製乙份深拷貝是有的,而淺拷貝沒有,也就是說淺拷貝拷貝出來的引用指向的是和原來的物件指向的同一片記憶體

** 類需要實現clonable介面,實現clone方法,如果是深拷貝的話,需要在呼叫父類的轉殖方法之後,自行將引用型別的屬性進行拷貝

package prototype;

import org.junit.test;

public class client

}

package prototype;

public class person implements cloneable

public person(person son)

public person getson()

}

有個細節,person類不實現clone方法也不會報錯,為什麼呢?因為object實現了clone方法,而所有的類都是object的子類,但是**不用寫extend object,這個實現序列化介面是一樣的

python 設計模式 原型模式 原型設計模式

原型設計模式有助於隱藏該類建立例項的複雜性,在物件的概念將與從頭建立的新物件的概念不同。如果需要,新複製的物件可能會在屬性中進行一些更改。這種方法節省了開發產品的時間和資源。如何實現原型模式?現在讓我們看看如何實現原型模式。實現如下 import copy class prototype type ...

設計模式 原型設計模式

建立型的模式,最後一種原型設計模式。是一種使用起來簡單,可以配合單例模式或是工廠設計模式使用的。先看一下,原型設計模式是怎麼回事兒吧。如果想使用原型設計模式。必須滿足乙個條件,首先實現cloneable介面,然後重寫clone方法。這樣就算是完成了,然後就開始測試了 建立完物件以後給phone乙個當...

原型設計模式

一 應用場景 在乙個特定的場景中經常需要出現多個相同但狀態各異的物件,通常的解決方法是通過new建立這些物件之後分別去設定這些物件的狀態。原型設計模式提供了更快捷 更有效的解決方法。二 意圖 通過複製 轉殖 拷貝 乙個指定型別的物件來建立更多同型別的物件。這個指定的物件可被稱為 原型 物件,也就是通...