Prototypeパターン
Prototypeパターンは、既存のインスタンスをコピー(複製)して新しいオブジェクトを生成するデザインパターンです。同じオブジェクトを何度もnewで生成するコストが高い場合や、生成処理が複雑な場合に役立ちます。
構成要素
Prototype(抽象クラス/インターフェース)
ConcretePrototype(具象クラス)
インスタンスを複製するためのメソッド(例:Clone)を定義します
ConcretePrototype(具象クラス)
実際に複製されるクラスで、Cloneメソッドの具体的な処理を実装します
Visual Basic(VB.NET)実装例
' 1. Prototype インターフェース
Public Interface IPrototype
Function Clone() As IPrototype
End Interface
' 2. ConcretePrototype クラス
Public Class ConcretePrototype
Implements IPrototype
Public Property Name As String
Public Property Value As Integer
Public Sub New(name As String, value As Integer)
Me.Name = name
Me.Value = value
End Sub
' 自身の複製を返すメソッド
Public Function Clone() As IPrototype Implements IPrototype.Clone
' 浅いコピー(MemberwiseClone)を作成
Return CType(Me.MemberwiseClone(), IPrototype)
End Function
Public Sub ShowInfo()
Console.WriteLine($"Name: {Name}, Value: {Value}")
End Sub
End Class
' 3. クライアント側での使用例
Public Module Module1
Public Sub Main()
' オリジナルのインスタンスを作成
Dim original As New ConcretePrototype("Original", 100)
original.ShowInfo()
' インスタンスを複製(Prototypeパターン)
Dim cloneObj As ConcretePrototype = CType(original.Clone(), ConcretePrototype)
cloneObj.Name = "Cloned" ' 複製された方のプロパティを変更
' 結果の確認
cloneObj.ShowInfo() ' Valueは100が引き継がれている
End Sub
End Module
※ VB.NETでは、Object.MemberwiseCloneメソッドを使用すると、クラスの現在のインスタンスの簡易コピー(浅いコピー)を簡単に作成できます。