原型模式是指原型例項指定建立物件的種類,並複製這些原型這些原型建立新的物件。
主要適用於:
(1)大量的getter和setter 賦值的場景
(2)類初始化消耗資源較多。
(3)使用 new 生成乙個物件需要非常繁瑣的過程(資料準備、訪問許可權)。
(4)建構函式比較複雜。
(5)在迴圈體中產生大量物件。
在 spring 中,原型模式應用得非常廣泛,例如 scope=「prototype」 ,我們經常用的 json.parseobject() 也是一種原型模式。分為淺轉殖和深轉殖兩種。
淺轉殖:完整複製值型別資料,沒有複製引用物件(也就是說所有的引用物件仍然指向原來物件的位址)。
乙個標準的原型模式**應該是這樣設計的:先建立原型 prototype 介面、建立需要轉殖的類concreteprototypea、建立轉殖的客戶端,通過客戶端來實現轉殖。
prototype介面
public
inte***ce
prototype
concreteprototypea 需要轉殖的類
public
class
concreteprototypea
implements
prototype
@override
public prototype clone()
// 省略getter、setter方法
}
client 客戶端類
public
class
client
public prototype startclone
(prototype concreteprototype)
}
test 測試類
public
class
prototypetest
}
這裡舉乙個房子和房子的主人的案例,房子有面積大小、樓層等屬性、房主有姓名、**等屬性。
房子類(包含這個房子的主人、面積、樓層屬性)
public
class
house
implements
serializable
public
house
(string roomid,
int area,
double price, houseowner owner)
}
房主類
public
class
houseowner
implements
serializable
public
houseowner
(int phone, string name)
}
test測試類
public
class
houseclonetest
}
如果我們轉殖的物件是單例物件,那麼就意味著深轉殖會破壞單例模式。實際上防止轉殖破壞單例模式的解決思路很簡單:禁止轉殖即可。
兩種方式:
1、 不實現 cloneable 介面;
2、重寫 clone() 方法,在 clone() 方法中返回單例物件;
@override
protected object clone()
throws clonenotsupportedexception
Spring5設計模式 委派模式
定義 是一種物件導向的設計模式,允許物件組合實現與繼承相同的 重用。它的基本作用就是負責任務的呼叫和分配任務,是一種特殊的靜態 可以理解為全權 但是 模式注重過程,而委派模式注重結果。委派模式屬於行為型模式,不屬於gof23種設計模式中。應用場景 1 委派物件本身不知道如何處理乙個任務或請求,而交給...
設計模式 5 原型模式
用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。其中有乙個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓所在。舉個現實中的例子來介紹原型模式。找工作的時候,我們需要準備簡歷。假設沒有列印裝置,因此需手寫簡歷,這些簡歷的內容都是一樣的。這樣有個缺陷,如果要修改簡歷中的某項,那麼所有...
設計模式 原型模式
1.首先分析原型模式的由來 一般來說,建立乙個物件可以由以下方法 知道物件的具體型別,直接用new生成。不知道型號,知道相應的需求,可以使用工廠方法模式。根據乙個已有的物件來複製為乙個新的物件,可以使用原型模式。2.原型模式可以簡單理解為拷貝原型物件得到新的物件。想象乙個配鑰匙的小店,給店主乙個原有...