在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 技術開發(fā)教程 > 詳細頁面

完成Prototype設計模式

完成Prototype設計模式

更新時間:2022-04-27 文章作者:未知 信息來源:網絡 閱讀次數:

實現Prototype設計模式

Implementing the Prototype design Pattern



當我建立一個類的實例很復雜時,我們可以使用Prototype模式。與其建立很多類的實例,還不如進行適當的修改后,使用最初的實例的副本。使用Prototype模式,可以通過克隆一個原型,減少子類的數量。Prototype模式可以減少類的實例的數量。

在這個模式中,通過克隆來創(chuàng)建對象。我們有時創(chuàng)建很多的子類,除了通過很多的子類來創(chuàng)建不同的對象,我們還可以只需要唯一的一個子類,這個子類保持對每個對象基類的引用,并通過這個子類創(chuàng)建對象。通過向子類的構造函數傳遞參數并克隆對象。每個對象都實現clone方法,所以可以被克隆。我們可以使用Prototype模式,通過克隆原型來減少子類的數量。

克隆可以通過實現Icloneable接口來實現。Icloneable接口中唯一的方法是Clone,并返回一個新的類的實例。

ICloneable.Clone method signature
[VisualBasic] Function Clone() As Object
[C#] object Clone();




我們必須了解Clone()方法只是一種淺表復制(Shallow copy),而不是深層復制(Deep copy)。所以它只是返回一個引用,而不象深層復制(Deep copy)那樣創(chuàng)建一個復制的實例。我們可以通過使用Iserializable接口來實現深層復制(Deep copy)。

另一個缺點就是原型的每個子類必須實現Clone()方法,有時候,增加clone方法是很困難的。

在這個例子中,我建立了EmpData類,并且實現了Icloneable接口和Iserializable接口。Icloneable接口需要實現Clone方法,使得類可以被復制。Iserializable接口為了實現對EmpData類的深層復制(Deep copy)。使用的方法為:將EmpData對象序列化為一個文件,也可以將這個文件反序列化為一個EmpData對象。

EmpData類包含兩個方法:GetEmpData和ChangeEmpData。這兩個方法被用來以一個字符串(string)的形式獲取EmpData對象、更改EmpData類。每個方法都可以被調用,來檢驗淺表復制(Shallow copy)和深層復制(Deep copy)的不同。淺表復制(Shallow copy)時,如果EmpData類改變時,這個變化也會同時出現在EmpData的克隆對象中;而在深層復制(Deep copy),如果EmpData對象發(fā)生改變時,這個變化不會出現在EmpData的克隆對象中。

EmpData類的構造函數讀取XML文件并創(chuàng)建Emp對象。

XML 文件




VB.Net 實現



Imports System.Xml

Imports System.IO

Imports System.Collections

Imports System.Runtime.Serialization

Imports System.Runtime.Serialization.Formatters.Binary

<Serializable()> Public Class CEmpData

Implements ICloneable, ISerializable

Private ArrEmp As ArrayList

Public Sub New()

Dim xmldoc As New XmlDocument

Dim node As XmlNode

Dim objEmp As CEmp

ArrEmp = New ArrayList

xmldoc.Load("empdata.xml")

For Each node In xmldoc.DocumentElement.ChildNodes

objEmp = New CEmp

objEmp.FName = node.SelectSingleNode("firstname").InnerText

objEmp.LName = node.SelectSingleNode("lastname").InnerText

ArrEmp.Add(objEmp)

Next

End Sub

Public Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)

Dim intIndex As Integer

Dim intCount As Integer

Dim objEmp As CEmp

ArrEmp = New ArrayList

intCount = CInt(info.GetValue("emp_count", GetType(String)))

For intIndex = 0 To intCount - 1

objEmp = New CEmp(info, context, intIndex)

ArrEmp.Add(objEmp)

Next

End Sub

Public Function Clone() As Object Implements ICloneable.Clone

Try

Return Me

Catch ex As Exception

MsgBox(ex.ToString)

End Try

End Function

Public Function Clone(ByVal Deep As Boolean) As Object

Try

If Deep Then

Return CreateDeepCopy()

Else

Return Clone()

End If

Catch ex As Exception

MsgBox(ex.ToString)

End Try

End Function

Private Function CreateDeepCopy() As CEmpData

Dim objEmpCopy As CEmpData

Dim objStream As Stream

Dim objBinFormatter As New BinaryFormatter

Try

objStream = File.Open("Empdata.bin", FileMode.Create)

objBinFormatter.Serialize(objStream, Me)

objStream.Close()

objStream = File.Open("Empdata.bin", FileMode.Open)

objEmpCopy = CType(objBinFormatter.Deserialize(objStream), CEmpData)

objStream.Close()

CreateDeepCopy = objEmpCopy

Catch ex As Exception

MsgBox(ex.ToString)

End Try

End Function

Public Sub GetObjectData(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable.GetObjectData

Dim intIndex As Integer

Dim objEmp As CEmp

info.AddValue("emp_count", ArrEmp.Count)

For intIndex = 0 To ArrEmp.Count - 1

objEmp = ArrEmp(intIndex)

objEmp.GetObjectData(info, context, intIndex)

Next

End Sub

Public Function GetEmpData() As String

Dim intCount As Integer

Dim strEmpData As String

For intCount = 0 To ArrEmp.Count - 1

strEmpData = strEmpData & CType(ArrEmp(intCount), CEmp).FName & Chr(9) & CType(ArrEmp(intCount), CEmp).LName & Chr(13)

Next

GetEmpData = strEmpData

End Function

Public Sub ChangeEmpData()

Dim objEmp As CEmp

For Each objEmp In ArrEmp

objEmp.FName = "FirstName"

objEmp.LName = "LastName"

Next

End Sub

End Class

Public Class CEmp

Private mstrFName As String

Private mstrLName As String

Public Property FName() As String

Get

FName = mstrFName

End Get

Set(ByVal Value As String)

mstrFName = Value

End Set

End Property

Public Property LName() As String

Get

LName = mstrLName

End Get

Set(ByVal Value As String)

mstrLName = Value

End Set

End Property

Public Sub New()

End Sub

Public Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext, ByVal intIndex As Integer)

mstrFName = CStr(info.GetValue("emp_fname" & intIndex, GetType(String)))

mstrLName = CStr(info.GetValue("emp_lname" & intIndex, GetType(String)))

End Sub

Public Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As StreamingContext, ByVal intIndex As Long)

info.AddValue("emp_fname" & intIndex, mstrFName)

info.AddValue("emp_lname" & intIndex, mstrLName)

End Sub

End Class

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 免费视频爱爱太爽了| 天天操精品视频| 免费极品av一视觉盛宴| 欧美成人福利在线观看| 亚洲成人av免费看| 成人免费视频久久| 50路60路老熟妇啪啪| 久久久久久久久久久久久国产精品 | 日韩视频免费在线播放| 18岁网站在线观看| 两根大肉大捧一进一出好爽视频| 久久av高潮av| 奇米影视亚洲色图| 男人天堂999| 一区二区xxx| 五月天婷婷在线观看视频| 欧美精品色视频| 男人添女人下部视频免费| 国产乱淫av片杨贵妃| 无码粉嫩虎白一线天在线观看 | 日韩 欧美 视频| 久久九九国产视频| 久久国产激情视频| 国产a级黄色大片| 国产精品国产亚洲精品看不卡 | 亚洲精品国产久| 久久视频这里有精品| 久久久久久久久久久久91| 日本一本在线视频| 亚洲中文字幕无码av永久| 少妇性l交大片| 成人国产一区二区三区| 丝袜制服一区二区三区| 欧美aaa在线观看| 欧美日韩性生活片| 在线视频一二区| 国产日韩一区二区在线| 亚洲欧美aaa| 日韩免费毛片视频| 国产一二三四五| 校园春色 亚洲色图| 日本国产中文字幕| 欧在线一二三四区| youjizz.com在线观看| 97超碰成人在线| 中国丰满人妻videoshd| 国产精品视频一二三四区| 黄色三级视频片| 欧美成人三级在线视频| 黄色高清视频网站| 亚洲欧美自偷自拍另类| 六月激情综合网| 福利视频免费在线观看| 精品久久免费观看| 亚洲一区日韩精品| 99热这里只有精品在线播放| 91成人综合网| 国产精品国三级国产av| www.色.com| 福利网在线观看| 污视频在线观看免费网站| 三级a三级三级三级a十八发禁止| 波多野结衣综合网| 黄色片网址在线观看| 日韩av中文字幕第一页| 国产在线视频三区| 日本超碰在线观看| 老司机午夜性大片| 久久成年人网站| xxx中文字幕| 国产精品jizz在线观看老狼| 亚洲视频一二三四| 免费网站在线观看黄| 久久99爱视频| 黄色在线视频网| 亚洲精品手机在线观看| 免费黄频在线观看| 手机成人av在线| 国产香蕉一区二区三区| 国产欧美久久久久| 给我免费播放片在线观看| 日韩免费视频播放| 一区二区成人网| 久久精品一卡二卡| 日本手机在线视频| 九色porny91| 男人的天堂成人| 国产视频一视频二| 亚洲成色www.777999| 国内精品国产三级国产aⅴ久| 丰满人妻一区二区三区53号| 91精品91久久久中77777老牛| 在线视频日韩一区 | 国产av天堂无码一区二区三区| 日韩欧美视频网站| 向日葵污视频在线观看| 三年中文高清在线观看第6集 | 5月婷婷6月丁香| 九九热免费在线观看| 日本免费a视频| 久久久久久久久久久久91| 91精品一区二区三区四区| 国产免费成人在线| 国产盗摄视频在线观看| 亚洲熟女乱色一区二区三区| 久久出品必属精品| 久久久久久久久久久免费视频| 亚洲一二三av| 毛片av免费在线观看| 九一免费在线观看| 超碰超碰在线观看| 欧美色图另类小说| 免费日韩在线观看| 污污的视频免费| 日本成人中文字幕在线| 4444亚洲人成无码网在线观看| 久久久精品麻豆| 成人在线免费在线观看| avav在线播放| 成人午夜免费剧场| 久久人人爽av| 久久久久久蜜桃一区二区| 午夜肉伦伦影院| 野外做受又硬又粗又大视频√| 精品亚洲视频在线| av免费一区二区| mm131国产精品| 麻豆av免费在线| 欧美aⅴ在线观看| 国产乱子夫妻xx黑人xyx真爽| 欧美 日韩 国产精品| 992tv成人免费观看| 亚洲精品永久视频| 日韩视频在线观看一区二区三区| 激情网站五月天| 激情视频综合网| 日本va中文字幕| 亚洲一级片网站| 午夜一级免费视频| 99久久99精品| 91手机视频在线| 久久www视频| 日韩精品在线视频免费观看| 免费看黄在线看| 日韩精品―中文字幕| 国产美女三级视频| 性生活免费在线观看| 欧美成人三级在线播放| 91插插插影院| 日本大片免费看| 伊人成色综合网| 天天色综合社区| 久久久国产欧美| 一区二区三区四区久久| 日本一级黄视频| 日韩在线视频在线观看| www.四虎成人| 992kp免费看片| 欧美一级欧美一级| 日本成人中文字幕在线| 三级黄色片播放| 999久久欧美人妻一区二区| 男人添女人下部高潮视频在观看| 久久精品午夜福利| 国产成年人在线观看| 亚洲中文字幕无码av永久| 久久久久久久片| japanese在线播放| 无码人妻精品一区二区三区66| 777视频在线| 国产精品网站免费| 美女一区二区三区视频| 91国在线高清视频| 深夜黄色小视频| 免费无码不卡视频在线观看| 国产免费中文字幕| 凹凸国产熟女精品视频| 天天干天天操天天干天天操| 午夜精品久久久内射近拍高清 | 无套内谢丰满少妇中文字幕| 精品丰满人妻无套内射| 男女污污视频网站| 国产性xxxx18免费观看视频| 国产麻豆电影在线观看| 一区二区三区 日韩| 夜夜添无码一区二区三区| 日韩av加勒比| 中文字幕网av| 日本精品久久久久中文字幕| 国产精品第157页| 中国一级黄色录像| 黄色手机在线视频| 50路60路老熟妇啪啪| 亚洲熟妇av日韩熟妇在线| 超碰10000| 欧美a级黄色大片| 久久久国产精华液999999 | 国产激情片在线观看| 熟女视频一区二区三区| 亚洲一区二区在线视频观看|