04-原型模式(Prototype)

概述:

使用原型實例指定要創建對象的類型,通過複製這個原型來創建新對象

不需要知道任何創建的細節,不調用構造函數

適用場景:

類初始化消耗較多資源

new產生的一個對象需要非常繁瑣的過程(數據準備、訪問權 限等 構造函數比較複雜

循環體中生產大量對象時

優點:

原型模式性能比直接new-個對象性能高

簡化創建過程

缺點:

必須配備克隆方法

對克隆複雜對象或對克隆出的對象進行復雜改造時,容易引入風險

深拷貝、淺拷貝要運用得當

 

public abstract class Prototype {

abstract Prototype myClone();}

public class ConcretePrototype extends Prototype {

 

private String filed;

 

public ConcretePrototype(String filed) {

this.filed = filed;

}

 

@Override

Prototype myClone() {

return new ConcretePrototype(filed);

}

 

@Override

public String toString() {

return filed;

}}

public class Client {

public static void main(String[] args) {

Prototype prototype = new ConcretePrototype("abc");

Prototype clone = prototype.myClone();

System.out.println(clone.toString());

}}

abc

 

附:

抽象克隆方法:在一個抽象類中添加克隆接口,重寫克隆方法,繼承他的子類也能夠進行克隆

 

如果使用默認的克隆方法,它是淺克隆(即雖然克隆出來的對象地址不同,但是如果克隆的對象中有引用類型的成員變量,在克隆後的對象中的對應成員變量是指向同一個變量對象地址的,修改被克隆對象的值,克隆對象的值也會隨之改變)

如果要進行深克隆的話,應當在重寫的克隆方法中單獨克隆引用類型的成員變量。

 

JDK中

* java.lang.Object#clone()

實現這個模式的如:

ArrayList

 

 

HashMap<K,V>

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章