程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 設計模式面面觀(7):原型模式(Prototype)-創建型模式

設計模式面面觀(7):原型模式(Prototype)-創建型模式

編輯:.NET實例教程

原型模式(Prototype)-創建型模式

 

重要聲明:

故事純屬虛構,如有雷同請勿對號入座,故事只是為了拋磚引玉,雖以第一人稱和作者本人網名起但不代表本人真實想法,請勿把故事中人物和作者本人聯系起來,故事本意只為模式創造前提條件

劇情:

    每天早晨睜開眼洗洗漱漱,一杯奶茶2個蛋黃派,吃完擰起包包踏上上班的路程,忙完一天拖著疲憊的身子回來,洗洗澡一屁股坐在床上再也不想起來了,於是拿起筆記本寫寫自己的代碼或者看看書,累了就一覺到天亮.哎程序員的日子就是這麼乏味,乏味的很啊,每天重復著做同一件事情,枯燥乏味,就像克隆出來似的。

    苦中作樂,回想回想上個星期的一周的早餐生活竟然是個很好的模式的縮影1杯牛奶2個蛋黃派,每天早晨固定的就吃這個,蛋黃派都是一個樣子一種口味,其實有點常識的朋友都知道蛋黃派就是雞蛋糕裡加了奶油,他們都是用磨具一個一個克隆出來的,所以啊樣子大體上都一樣。蛋黃派有很多種類口味有奶油的草莓的,鮮橙的等等。那麼多中蛋黃派工廠是不是要生產各種蛋黃派的磨具呢。答案肯定是不 !要不工廠每換一種蛋黃派就要換一套生產流水線這個是不實際的,其實很簡單把注入奶油的容器加入其他口味的奶油就可以了其他程序完全克隆。

由於這個模式組成非常的簡單,所以也無需套用以前的設計模式原則,這個模式很簡單。主題就是克隆,我個人認為他是繼單件模式後最簡單的一種生產型模式。模式雖然簡單但他的實際操作起來缺不那麼簡單。原型模式做重要的技術點是前拷貝和深拷貝的問題。

(以下摘自:《.Net框架程序設計(修訂版)》,李建忠譯)淺拷貝是指當對象的字段值被拷貝時,字段引用的對象不會被拷貝。例如,如果一個對象有一個指向字符串的字段,並且我們對該對象做了一個淺拷貝,那麼兩個對象將引用同一個字符串。而深拷貝是對對象實例中字段引用的對象也進行拷貝的一種方式,所以如果一個對象有一個指向字符串的字段,並且我們對該對象做了一個深拷貝的話,我們將創建一個新的對象和一個新的字符串--新對象將引用新字符串。需要注意的是執行深拷貝後,原來的對象和新創建的對象不會共享任何東西;改變一個對象對另外一個對象沒有任何影響。

.Net 中拷貝方法

l        MemberwiseClone 要求被克隆的對象成員必須是值類型

l        新NEW 一個類把被克隆的類成員一個一個賦值進去(體力活)

l        利用.Net序列化和飯序列化(性能沒有以上兩種好)

利弊大家依據具體情況有選擇的使用

由於原型模式和抽象工廠模式、生成器模式都具有類似的作用所以在開發中選擇模式的時候在要克隆的對象成員中無復雜或沒有其他引用成員時可用,如果對象成員中有循環調用成員或一個類嵌套成員慎用原型模式,可以用其他兩種模式代替,減少開發難度。

總結 :原型模式

意圖

用原型實力指定創建對象的種類,並且通過靠本這些原型創建新的對象

動機

在軟件系統在,經常面臨著“某些結構復雜的對象”的創建工作;由於需求的變化,這些對象經常面臨著劇烈的變化,但它們擁有的比較穩定的一致接口。

實用性

l         避免過多創建Factory工廠類

l         動態創建類型。

適用性

l         當要實例化的類是在運行時刻指定時。(如動態裝載)

l         為了避免創建一個與產品層次平行的工廠類層次  當一個類的實例只能有幾個不同狀態組合中的一種時。建立相應數目的原型並克隆它們可能比每次用合適的狀態手工實例化更方便些

結構

 

參與者

l         Prototype                            ICloneable                                 

l         ConcretePrototype         (DanHuangPai)

l         ClIEnt                         (用戶)

效果

1.         可運行時刻增加和刪除產品

2.         改變值以指定新對象

3.         改變結構以指定新對象

4.         減少子類的構造

5.         用類動態配置應用(一些運行時刻環境允許你動態將類裝載到應用中)

代碼

項目代碼總介紹了2中克隆方法,原始方法和MemberwiseClone方法

 

CSDN資源網站又掛了暫時上傳不了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved