介紹
原型模式(Prototype Pattern)是用于創(chuàng)建重復(fù)的對象,同時又能保證性能。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。
原型模式多用于創(chuàng)建復(fù)雜的或者耗時的實例,因為這種情況下,復(fù)制一個已經(jīng)存在的實例使程序運行更高效;或者創(chuàng)建值相等,只是命名不一樣的同類數(shù)據(jù)。
優(yōu)點
- 性能提高。
- 簡化對象的創(chuàng)建
注意事項
- 使用原型模式復(fù)制對象不會調(diào)用類的構(gòu)造方法。
- 有深拷貝與淺拷貝。
結(jié)構(gòu)圖
這里寫圖片描述
案例
Prototype 類
class Prototype implements Cloneable {
public Prototype clone(){
Prototype prototype = null;
try{
prototype = (Prototype)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return prototype;
}
}
ConcretePrototype 類
class ConcretePrototype extends Prototype{
public void show(){
System.out.println("原型模式實現(xiàn)類");
}
}
Client類
public class Client {
public static void main(String[] args){
ConcretePrototype cp = new ConcretePrototype();
for(int i=0; i< 10; i++){
ConcretePrototype clonecp = (ConcretePrototype)cp.clone();
clonecp.show();
}
}
}
這里寫圖片描述
淺克隆和深克隆
淺克隆
只負責(zé)克隆按值傳遞的數(shù)據(jù)(比如基本數(shù)據(jù)類型、String類型),而不復(fù)制它所引用的對象,換言之,所有的對其他對象的引用都仍然指向原來的對象。
深克隆
除了淺度克隆要克隆的值外,還負責(zé)克隆引用類型的數(shù)據(jù)。那些引用其他對象的變量將指向被復(fù)制過的新對象,而不再是原有的那些被引用的對象。換言之,深度克隆把要復(fù)制的對象所引用的對象都復(fù)制了一遍,而這種對被引用到的對象的復(fù)制叫做間接復(fù)制。
說簡單點就是復(fù)制值(淺克隆)還是引用(深克隆).深克隆還存在一個死循環(huán)的問題,所以需要多加注意。