国产午夜成人免费看片无遮挡_日本免费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>

        亚洲色图丝袜美腿| 久久久综合视频| 日韩一区二区免费视频| 亚洲国产精品一区二区www在线| 成人午夜电影小说| 国产精品二三区| 欧美日韩亚洲不卡| 免费人成网站在线观看欧美高清| 精品国产自在久精品国产| 国产精品538一区二区在线| 国产精品每日更新| 欧美视频一区二区三区四区| 男人操女人的视频在线观看欧美| 337p日本欧洲亚洲大胆精品| 成人av免费在线播放| 亚洲午夜免费视频| 国产亚洲午夜高清国产拍精品| 91看片淫黄大片一级在线观看| 亚洲一二三区视频在线观看| 久久久久国色av免费看影院| 欧美亚洲高清一区| 国产在线视频一区二区三区| 亚洲人精品午夜| 91精品一区二区三区在线观看| 国产美女一区二区三区| 亚洲一区二区中文在线| 久久一区二区三区国产精品| 欧美日韩国产123区| 成人手机电影网| 久久99热这里只有精品| 亚洲国产一区视频| 国产精品三级视频| 精品国产电影一区二区| 欧美群妇大交群中文字幕| eeuss国产一区二区三区| 狠狠色狠狠色综合| 日精品一区二区| 一区二区三区在线看| 久久久久久久综合色一本| 制服丝袜中文字幕一区| 在线观看视频一区| av中文字幕一区| 国产a级毛片一区| 国产一区二区美女诱惑| 免费成人结看片| 五月激情丁香一区二区三区| 玉米视频成人免费看| 国产精品视频在线看| 久久久久久久久久久久电影| 精品免费国产二区三区| 欧美电视剧免费观看| 日韩欧美激情一区| 欧美精品一二三| 欧美色图片你懂的| 欧美在线你懂得| 欧美视频在线一区二区三区| 欧美性色欧美a在线播放| 欧美怡红院视频| 欧美日韩视频在线第一区| 欧美午夜电影在线播放| 欧美日韩亚洲综合一区二区三区| 欧美亚洲国产怡红院影院| 欧美三级电影精品| 这里只有精品视频在线观看| 欧美一卡在线观看| 亚洲精品一区二区三区四区高清 | 亚洲欧洲av另类| 亚洲色图欧美激情| 亚洲自拍都市欧美小说| 午夜久久久久久| 毛片一区二区三区| 国产成人综合网| 一本大道综合伊人精品热热 | 日本精品一区二区三区四区的功能| 成人午夜av在线| 色综合久久久久网| 在线观看日韩一区| 91麻豆精品国产91久久久| 欧美不卡123| 国产精品久久毛片a| 亚洲精品老司机| 日韩不卡一区二区三区| 国产91精品入口| 精品1区2区3区| 久久精品亚洲一区二区三区浴池 | 亚洲免费在线视频一区 二区| 亚洲伊人色欲综合网| 三级影片在线观看欧美日韩一区二区| 美日韩一区二区三区| zzijzzij亚洲日本少妇熟睡| 欧美人妖巨大在线| 国产欧美日韩在线观看| 亚洲国产日产av| 国产a级毛片一区| 欧美日韩一区二区三区视频| 久久久久88色偷偷免费| 亚洲国产一区视频| 国产999精品久久| 欧美日韩一区国产| 国产日本亚洲高清| 亚洲香肠在线观看| 成人福利视频在线| 欧美v亚洲v综合ⅴ国产v| 亚洲狠狠丁香婷婷综合久久久| 极品销魂美女一区二区三区| 欧美三级资源在线| 日本一二三不卡| 久久爱www久久做| 欧美午夜电影网| 自拍偷拍国产亚洲| 国产成人免费高清| 日韩女优毛片在线| 天天av天天翘天天综合网| 91视频一区二区三区| 国产午夜亚洲精品不卡| 美女任你摸久久| 欧美日韩综合在线| 亚洲欧美电影院| 成人毛片老司机大片| 国产人伦精品一区二区| 国内久久婷婷综合| 精品久久人人做人人爽| 美女一区二区三区在线观看| 欧美日韩成人综合| 夜夜嗨av一区二区三区网页| 99久久精品免费看国产| 中文字幕在线不卡一区二区三区 | 欧美日本视频在线| 亚洲一区二区视频| 在线视频国内一区二区| 国产精品美女一区二区| 懂色av一区二区三区蜜臀| 精品国产免费人成在线观看| 免费av网站大全久久| 日韩免费福利电影在线观看| 日本视频在线一区| 日韩欧美一区二区久久婷婷| 男男视频亚洲欧美| 精品国产一区二区三区不卡| 国产在线精品一区二区| 国产欧美日产一区| 成人精品视频一区二区三区尤物| 国产午夜精品在线观看| 国产成+人+日韩+欧美+亚洲| 国产精品国产三级国产专播品爱网 | 在线不卡一区二区| 日本亚洲免费观看| 精品久久国产97色综合| 国产成人综合在线观看| 中文字幕成人在线观看| 99久久伊人精品| 一卡二卡三卡日韩欧美| 欧美精品第1页| 国产一本一道久久香蕉| 中文字幕视频一区| 精品视频一区 二区 三区| 久久激情综合网| 17c精品麻豆一区二区免费| 在线精品亚洲一区二区不卡| 免费在线成人网| 国产午夜亚洲精品不卡| 欧洲一区二区av| 韩国精品在线观看| 一区二区三区视频在线看| 日韩欧美成人激情| 91丨porny丨蝌蚪视频| 日本亚洲最大的色成网站www| 国产日韩欧美不卡| 欧美片网站yy| 国产a区久久久| 午夜不卡在线视频| 国产精品无人区| 日韩午夜精品电影| 色婷婷精品久久二区二区蜜臀av | 中文字幕+乱码+中文字幕一区| 一本一道久久a久久精品综合蜜臀| 婷婷久久综合九色国产成人 | 激情综合色丁香一区二区| 亚洲欧洲国产日韩| 欧美电影免费观看高清完整版在线 | 高清不卡一区二区在线| 亚洲成人一区二区| 亚洲欧美在线aaa| 精品国产一二三区| 7777精品伊人久久久大香线蕉经典版下载 | 日本道色综合久久| 国产激情视频一区二区在线观看 | 色域天天综合网| 国产成人一区二区精品非洲| 五月天欧美精品| 亚洲一区二区视频在线观看| 亚洲国产精品成人综合| 精品播放一区二区| 日韩一区二区三区电影| 欧美日韩一区二区三区不卡| 91在线无精精品入口| www.欧美亚洲| 91小视频在线免费看| 成人黄色一级视频| 国产一区二区看久久|