国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

原型設計模式

2019-11-14 12:33:55
字體:
來源:轉載
供稿:網友

前言

這個模式我感覺對于我們大家來說真是的在熟悉不過了,不就是復制啊,在寫代碼的時候我有的時候就會ctrl+c,ctrl+v,復制的時候挺爽,出錯的時候別哭就行,嘻嘻

(如有異同請指出)

內容

定義:用原型實例制定創建對象的種類,并且通過拷貝這些原型創建新的對象 解釋:我們通過原型模式可以快速的創建一個對象而不需要提供專門的new()操作就可以快速完成對象的創建,這無疑是一種非常有效的方式,快速的創建一個新的對象,原型模式其實就是從一個對象再創建另外一個可定制的對象,而且不需要知道任何創建的細節。 當我們學習工廠模式和簡單工廠等一些模式的時候,我們需要在開頭的時候就需要new一個對象而原型設計模式突破了這種繁瑣,它不用一點一點的從頭開始進行(初始化新對象),直接利用結果就好(動態的獲得對象運行時的狀態)

例如圖: 這里寫圖片描述 說簡單點其實原型設計模式就是copy出來一個原來對象,就像孫悟空拔下一嘬猴毛,輕輕一吹就會變出好多的孫悟空來。

淺復制與深復制

Object類的clone方法只會拷貝對象中的基本的數據類型,對于數組、容器對象、引用對象等都不會拷貝,這就是淺拷貝。 淺復制其實就是傳引用,當copy的時候我們copy的是地址中的內容,當地址中的內容改變,我們隨之也改變

實現深拷貝:必須將原型模式中的數組、容器對象、引用對象等另行拷貝 深復制其實就是傳引用,當copy的時候我們copy的是值,也就是說當地址中的值改變的時候不會影響到我們原來的值。 在代碼中體現淺復制與深復制的區別,通過接口我們可以看出區別 如圖 這里寫圖片描述

代碼

深復制代理類

//簡歷類 class Resume : ICloneable { //定義姓名,性別,年齡,工作經歷里面的work,引用工作經歷對象 PRivate string name; private string sex; private string age; private WorkExperience work; //只對工作經歷進行copy,在簡歷類實例化時間時實例化"工作經歷" public Resume(string name) { this.name = name; work = new WorkExperience(); } //提供Clone方法調用的私有構造函數,以便克隆工作經歷的數據 private Resume(WorkExperience work) { this.work = (WorkExperience)work.Clone(); } . . . . //調用私有的構造方法,讓工作經歷克隆完成,然后 public object Clone() { Resume obj = new Resume(this.work ); obj.name = this.name; obj.sex = this.sex; obj.age = this.age; return obj ; } } //工作經歷類實現ICloneable class WorkExperience:ICloneable { //定義工作時間字段 private string workDate; //屬性 public string WorkDate { get { return workDate; } set { workDate = value; } } //定義公司 private string company; //屬性 public string Company { get { return company; } set { company = value; } } //工作盡力類實現克隆方法 public object Clone() { return (object)this.MemberwiseClone(); } }

淺復制代碼

//簡歷類 class Resume:ICloneable { //定義姓名,性別,年齡,工作經歷里面的work,引用工作經歷對象 private string name; private string sex; private string age; private WorkExperience work; //只對工作經歷進行copy,在簡歷類實例化時間時實例化"工作經歷" public Resume(string name) { this.name = name; work = new WorkExperience(); } . . . public object Clone() { return (object)this.MemberwiseClone(); } } //工作經歷類 class WorkExperience { //定義工作時間字段 private string workDate; . . . .....
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江阴市| 东辽县| 错那县| 景泰县| 额尔古纳市| 京山县| 绥芬河市| 五华县| 长治市| 金乡县| 泰来县| 阿图什市| 巴林右旗| 上虞市| 南漳县| 增城市| 云林县| 遂平县| 英吉沙县| 六安市| 哈巴河县| 新巴尔虎右旗| 榕江县| 克什克腾旗| 邢台县| 吉安县| 永德县| 镇坪县| 车险| 山丹县| 黄梅县| 镇远县| 建德市| 安图县| 高安市| 堆龙德庆县| 罗田县| 云浮市| 凤山县| 绿春县| 宁德市|