設計模式 原型模式

2021-10-07 02:48:42 字數 2902 閱讀 2585

問題引入:誇張的簡歷。

簡歷類:

class

resume

public

void

setpersonalinfo

(string ***,

int age)

public

void

setworkexperience

(string timearea,string company)

public

void

display()

}

客戶端:

public

class

main

}

如**所示,沒寫乙份簡歷都要新例項化乙個物件,實現起來非常麻煩,不現實

對此情景而言,可以先例項化乙份簡歷作為原型,其他的簡歷可以通過複製第乙份簡歷而實現,避免了每寫乙份簡歷就例項化一次的複雜操作。原型模式其實就是從乙個物件再建立另乙個可定製的物件,而且不需要知道任何建立的細節。

改進1:

改變:實現了複製的介面類,增加了複製方法

簡歷類:

class

resume

implements

cloneable

//實現了介面類

public

void

setpersonalinfo

(string ***,

int age)

public

void

setworkexperience

(string timearea,string company)

public

void

display()

public resume clone()

throws clonenotsupportedexception

}

客戶端:

public

class

main

}

改進2:將簡歷類裡面的work單獨另寫乙個workexperience類

工作經歷類:

class

workexperience

public

void

setworkdate

(string workdate)

public string getcompany()

public

void

setcompany

(string company)

}

簡歷類:

class

resume

implements

cloneable

public

void

setwork

(string workdate,string company)

public

void

display()

public resume clone()

throws clonenotsupportedexception

}

客戶端類似上面

顯示:

出現了問題,控制台上顯示的都是最後一次設定的值。該問題是因為淺複製引起的。

在"改進2"裡,將工作經歷單獨寫了乙個類,是簡歷類的乙個字段,而淺複製是:如果欄位是值型別的,則對該字段逐位複製,如果是引用型別,則複製引用,但不複製引用的物件。在該例中resume中的name、***和age都是值型別的,所以當進行 」resume b=a.clone()」時 ,被複製的新物件b的變數name、***和age都與原來的物件a有相同的值,而新物件b的work只是複製了原來的物件的引用,其指向的仍然是原來的物件a的值

改進3:

讓workexeprience類也實現cloneable介面,實現深複製

工作經歷類:

class

workexperience

implements

cloneable

public

void

setworkdate

(string workdate)

public string getcompany()

public

void

setcompany

(string company)

public workexperience clone()

catch

(clonenotsupportedexception e)

return null;

}}

簡歷類:(隨之做相應改變)

class

resume

implements

cloneable

public

void

setwork

(string workdate,string company)

public

void

display()

public resume clone()

}

設計模式 原型模式

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

設計模式 原型模式

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

設計模式 原型模式

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