大話設計模式之原型模式

2021-09-07 10:59:29 字數 2122 閱讀 5868

用原型例項制定建立物件的種類,並通過拷貝這些原型。建立新的物件。

就是從乙個物件在建立還有乙個可定製的物件。並且不須要知道不論什麼建立的細節。

(1)、實現cloneable介面,能夠使用此介面的類上使用clone方法。

(2)、重寫object類中的clone方法,由於全部類的父類是object類。object有乙個clone方法。作用是返回物件的乙個拷貝。可是其作用域protected型別的,一般的類無法呼叫,因此,將clone改為public型別。

**實現:

class resume : icloneable//實現icloneable介面

public void setwordexperience(string computer)

public void display()

", name);

console.writeline("工作經歷: ", computer);

}public object clone()//重寫clone方法,改為public型別

}

client**:

class program

console.read();}}

這就是簡單複製。一般在初始化的資訊不發生變化的情況下,科隆市最好的辦法,這既隱藏了物件建立的細節,有對效能是大大的提高。

使用原型模式建立物件比直接new乙個物件在效能上要好的多。由於object類的clone方法是乙個本地方法,它直接操作記憶體中的二進位製流,特別是複製大物件時,效能的區別很明顯。

object類的clone方法僅僅會拷貝物件中的主要的資料型別。對於陣列、容器物件、引用物件等都不會拷貝。這就是淺拷貝。假設要實現深拷貝。必須將原型模式中的陣列、容器物件、引用物件等另行拷貝。

這裡指談談引用物件的深複製:

須要解決的**:

class wrokexperience//新增加乙個類

set }}

class resume : icloneable

public void setworkexperience(string computer, string workdate)

public void display()

", name);

console.writeline("工作經歷: ", work.workdate, computer);//這裡的workdate ,須要的是每一次賦值的。

} public object clone() } class program }

執行結果:

而實際上,我們須要的是不一樣的。

改動**:

class workexperience : icloneable//對於引用類相同的拷貝

set

}public object clone()

}class resume : icloneable

private resume(workexperience work)//做了乙個私有的構造方法。讓它轉殖完畢,然後再給這個」簡歷「物件的響應字段賦值,終於返回乙個深複製的簡歷物件

public void setexperience(string workdate, string computer)

public void display()

", name);

console.writeline("工作經歷: ", work.workdate, computer);

}public object clone()

}

client**不變。

執行結果:

得到預期結果。

事實上,我們使用原型模式,簡單的說我們就是簡化物件的建立。

大話設計模式 原型模式

學無止境,精益求精 十年河東,十年河西,莫欺少年窮 學歷代表你的過去,能力代表你的現在,學習代表你的將來 上篇部落格介紹了c 深淺複製,其實原型模式講的主要就是物件的深淺複製 參考 c 深淺複製 memberwiseclone ok,言歸正傳 原型模式的概念 用原型例項指定建立物件的種類,並且通過拷...

《大話設計模式》 原型模式

如果物件的建立成本比較大,而同乙個類的不同物件之間差別不大 大部分欄位都相同 在這種情況下,我們可以利用對已有物件 原型 進行複製 或者叫拷貝 轉殖 的方式,來建立新物件,以達到節省建立時間的目的。這種基於原型來建立物件的方式就叫作原型設計模式,簡稱原型模式。核心 拷貝 轉殖 建立物件包含的申請記憶...

大話設計模式七之原型模式

簡歷影印 原型模式 prototype 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型模式其實就是從乙個物件再建立另外乙個可定製的物件,而且不需知道任何建立的細節 net再system命名空間中提供了icloneable介面,其中就是唯一的乙個方法clone 這樣只需要實現這個...