国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

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

完成Prototype設計模式

完成Prototype設計模式

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

實現Prototype設計模式

Implementing the Prototype design Pattern



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

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

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

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




我們必須了解Clone()方法只是一種淺表復制(Shallow copy),而不是深層復制(Deep copy)。所以它只是返回一個引用,而不象深層復制(Deep copy)那樣創建一個復制的實例。我們可以通過使用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對象發生改變時,這個變化不會出現在EmpData的克隆對象中。

EmpData類的構造函數讀取XML文件并創建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

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

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        欧美国产禁国产网站cc| 日韩无一区二区| 日韩成人精品视频| 午夜精品一区二区三区三上悠亚| 18成人在线观看| 久久成人免费网| 欧美性一级生活| 国产精品美女久久久久久2018| 亚洲精品欧美激情| 国产精品2024| 欧美一区二区网站| 亚洲精品视频在线观看免费| 久久不见久久见免费视频7| 91福利国产精品| 亚洲一区二区3| 色悠悠久久综合| 久久综合久色欧美综合狠狠| 99久久精品一区| 久久国产精品露脸对白| 一区二区三区精品| 欧美一区二区三区在线视频| 国产精品99久久久久久似苏梦涵 | 日韩二区三区在线观看| 26uuu国产在线精品一区二区| 97se狠狠狠综合亚洲狠狠| 国产在线播放一区二区三区| 亚洲一区二区三区在线看| 精品久久久久香蕉网| 色综合久久久久综合体桃花网| 午夜激情综合网| 国产精品入口麻豆原神| 欧美一级在线观看| 91久久线看在观草草青青| 国产精华液一区二区三区| 日韩高清在线不卡| 一区二区三区不卡视频在线观看| 日韩一区二区三区视频在线 | 欧美一级理论片| 亚洲精品亚洲人成人网在线播放| 日韩va欧美va亚洲va久久| 成人免费视频caoporn| 欧美视频自拍偷拍| 一区二区三区在线视频免费观看| 欧美aaaaaa午夜精品| 日本精品一区二区三区高清| 国产精品久久二区二区| 男人操女人的视频在线观看欧美 | 欧美日韩国产一二三| 91国在线观看| 91精品久久久久久蜜臀| 日本一区二区在线不卡| 亚洲欧美日韩国产综合| 日韩国产欧美视频| 国产资源在线一区| 色婷婷亚洲一区二区三区| 欧美一二三四在线| 亚洲另类中文字| 国产精品中文字幕欧美| 欧美福利视频导航| 亚洲视频免费看| 蜜桃一区二区三区在线| www.亚洲色图| 日韩免费性生活视频播放| 国产精品久久久一区麻豆最新章节| 亚洲一区二区欧美| 成人午夜视频在线观看| 日韩欧美国产一二三区| 午夜精品久久久久久久久 | 久久众筹精品私拍模特| 亚洲精选一二三| 不卡的av在线| 亚洲免费视频中文字幕| 国产成人免费视频一区| 久久久亚洲国产美女国产盗摄| 日韩高清欧美激情| 911精品国产一区二区在线| 国产精品久久久久久一区二区三区| 一二三区精品福利视频| 成人开心网精品视频| 亚洲欧美欧美一区二区三区| 成人一区二区三区| 国产精品乱码妇女bbbb| 成人av在线资源| 亚洲精品国产a| 欧美精选在线播放| 国产在线视频一区二区三区| 久久综合九色综合97婷婷| 成人午夜视频免费看| 欧美一区二区三区白人| 美日韩一区二区| 最新日韩av在线| 精品国产三级电影在线观看| 国产一本一道久久香蕉| 亚洲精品国产精华液| 欧美va亚洲va在线观看蝴蝶网| 国产在线不卡一区| 亚洲人xxxx| 欧美国产精品中文字幕| 欧美一区二区三区色| 91丨九色丨国产丨porny| 久久精品国产久精国产爱| 天堂在线一区二区| 亚洲国产成人精品视频| 亚洲线精品一区二区三区八戒| 亚洲精品你懂的| 午夜一区二区三区在线观看| 亚洲欧美激情插| 蜜臀va亚洲va欧美va天堂| 韩国成人在线视频| 日本大香伊一区二区三区| 精品中文字幕一区二区| 制服丝袜一区二区三区| 国产精品亚洲综合一区在线观看| 成人欧美一区二区三区| 日韩免费一区二区三区在线播放| 成人av资源在线观看| 国内外成人在线| 国产乱人伦偷精品视频不卡| 麻豆国产一区二区| 免费久久精品视频| 麻豆高清免费国产一区| 美腿丝袜亚洲色图| 久久av老司机精品网站导航| 国产呦萝稀缺另类资源| 91在线精品一区二区| 色婷婷亚洲婷婷| 欧美另类高清zo欧美| 久久久蜜桃精品| 亚洲精品美腿丝袜| 极品少妇一区二区| 91福利国产成人精品照片| 日韩你懂的电影在线观看| 成人欧美一区二区三区在线播放| 五月激情综合婷婷| 不卡一卡二卡三乱码免费网站| 欧美在线一二三| 中文字幕欧美三区| 人禽交欧美网站| 99久久婷婷国产精品综合| 日韩精品一区二区三区蜜臀| 一区二区三区免费看视频| 美女爽到高潮91| 91成人国产精品| 亚洲欧美自拍偷拍色图| 国产精品资源在线观看| 日韩一级片在线观看| 午夜日韩在线观看| 色哦色哦哦色天天综合| 亚洲视频一区二区在线| 不卡在线视频中文字幕| 亚洲精品一区在线观看| 日本vs亚洲vs韩国一区三区| 678五月天丁香亚洲综合网| 亚洲成a人片在线不卡一二三区| 91国模大尺度私拍在线视频| 国产精品二三区| 一本色道久久加勒比精品| 国产精品国产三级国产aⅴ无密码| 国产精品一级片| 亚洲视频在线一区二区| 91看片淫黄大片一级| 欧美一区二区三区在线观看| 午夜电影网一区| 精品国产成人系列| 成人午夜视频网站| 亚洲日本中文字幕区| 精品av久久707| 成人久久久精品乱码一区二区三区 | 亚洲日本一区二区| 91精品国产综合久久小美女| 九色综合狠狠综合久久| 亚洲视频中文字幕| 久久夜色精品国产噜噜av| 色婷婷综合久久久久中文一区二区 | 精品国精品自拍自在线| www.av精品| 国产精品一区二区91| 人禽交欧美网站| 亚洲一区二区三区四区在线| 2020国产成人综合网| 色猫猫国产区一区二在线视频| 老司机午夜精品| 三级影片在线观看欧美日韩一区二区| 久久久三级国产网站| 欧美一区二区在线视频| 欧美精品aⅴ在线视频| 欧美性生活久久| 一本到不卡精品视频在线观看 | 国产亚洲欧美激情| 精品粉嫩aⅴ一区二区三区四区| 欧美在线观看一区| 91久久免费观看| 7777精品伊人久久久大香线蕉超级流畅| 91国在线观看| 日韩一区二区视频在线观看| 欧美另类一区二区三区| 欧美xxx久久| 亚洲婷婷在线视频| 亚洲观看高清完整版在线观看| 五月婷婷欧美视频|