設計模式 原型模式

2021-09-29 20:41:56 字數 1715 閱讀 2703

原型模式是一種特殊的建立型模式,它通過複製乙個已有物件來獲取更多相同或者相似的物件。原型模式可以提高相同型別物件的建立效率,簡化建立過程。 

淺轉殖:如果原型物件的成員變數是值型別(如 int、double、byte、boolean、char等基本資料型別),將複製乙份給轉殖物件;如果原型物件的成員變數是引用型別(如類、介面、陣列等複雜資料型別),則將引用物件的位址複製乙份給轉殖物件,也就是說轉殖物件的成員變數指向相同的記憶體位址。簡單來說,在淺轉殖中,當原型物件被複製時只是複製它本身和其中包含的值型別的成員變數,而引用型別的成員變數並沒有複製。

深轉殖:無論原型物件的成員變數是值型別還是引用型別,都將複製乙份給轉殖物件,深轉殖將原型物件的所有引用物件也複製乙份給轉殖物件。簡單來說,在深轉殖中,除了物件本身被複製外,物件所包含的所有成員變數也將被複製。

public abstract class prototype 

class concreteprototype extends prototype

public void setattr(string attr)

@override

public prototype clone()

public static void main(string args)

}

class concreteprototype implements cloneable

public void setattr(string attr)

@override

protected object clone() throws clonenotsupportedexception

public static void main(string args) throws clonenotsupportedexception

}

/**

* 週報

*/public class weeklylog implements serializable, cloneable

public void setattachment(attachment attachment)

public string getname()

public void setname(string name)

public string getdate()

public void setdate(string date)

public string getcontent()

public void setcontent(string content)

/*** 淺轉殖

*/public weeklylog clone() catch (clonenotsupportedexception e)

}/**

* 使用序列化技術實現深轉殖

*/public weeklylog deepclone() throws ioexception, classnotfoundexception

}/**

* 附件

*/class attachment implements serializable

public void setname(string name)

public void download()

}class client

}

設計模式 原型模式

1.首先分析原型模式的由來 一般來說,建立乙個物件可以由以下方法 知道物件的具體型別,直接用new生成。不知道型號,知道相應的需求,可以使用工廠方法模式。根據乙個已有的物件來複製為乙個新的物件,可以使用原型模式。2.原型模式可以簡單理解為拷貝原型物件得到新的物件。想象乙個配鑰匙的小店,給店主乙個原有...

設計模式 原型模式

魔術師手拿一張百元大鈔,瞬間又變出兩張。也像配鑰匙一樣,拿一把鑰匙,老師傅就能做出另乙個一模一樣的。像這種複製我們並不陌生,類似於我們設計中的原型模式 本文將從以下幾點 原型模式 概述 結構圖 淺複製深複製 總結 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。允許乙個物件再建立另外...

設計模式 原型模式

原型模式 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。1 假設我們現有乙個物件,但是它的型別需要執行期確定,我們不知道它的動態型別是什麼,現在我們想建立它的副本。顯然通過建構函式建立是很麻煩的,這時候我們可以使用原型模式中的clone函式直接得到該物件的副本。2 有些時候我們想要...