GoF:Builder

公開:2026.06.01(月) 00:18

Builder

複雑なオブジェクトの構築過程を分離・順序化し、同じ構築プロセスで異なる表現形式(インスタンス)を作成できるデザインパターンです。

構成要素

Builder (抽象ビルダー)
オブジェクトを構築するための共通インターフェースを定義

ConcreteBuilder (具象ビルダー)
Builderを実装し、実際の構築手順と生成オブジェクトを管理

Director (ディレクター)
Builderを使って構築プロセスを順序立てて実行

Product (製品)
最終的に生成される複雑なオブジェクト

Visual Basic(VB.NET)実装例

メール生成の例
' Product: 生成されるオブジェクト
Public Class MailMessage
    Public Property Sender As String
    Public Property Recipient As String
    Public Property Subject As String
    Public Property Body As String
    
    Public Sub Display()
        Console.WriteLine($"From: {Sender}, To: {Recipient}, Subject: {Subject}")
    End Sub
End Class

' Builder: 抽象ビルダー
Public MustInherit Class MailBuilder
    Protected mail As New MailMessage()
    
    Public MustOverride Sub BuildSender(sender As String)
    Public MustOverride Sub BuildRecipient(recipient As String)
    Public MustOverride Sub BuildContent(subject As String, body As String)
    
    Public Overridable Function GetResult() As MailMessage
        Return mail
    End Function
End Class

' ConcreteBuilder: 具象ビルダー
Public Class HtmlMailBuilder
    Inherits MailBuilder
    
    Public Overrides Sub BuildSender(sender As String)
        mail.Sender = $"{sender}"
    End Sub
    
    Public Overrides Sub BuildRecipient(recipient As String)
        mail.Recipient = $"{recipient}"
    End Sub
    
    Public Overrides Sub BuildContent(subject As String, body As String)
        mail.Subject = $"

{subject}

" mail.Body = $"

{body}

" End Sub End Class ' Director: 構築プロセスの制御 Public Class MailDirector Private builder As MailBuilder Public Sub New(builder As MailBuilder) Me.builder = builder End Sub Public Function Construct(sender As String, recipient As String, subject As String, body As String) As MailMessage builder.BuildSender(sender) builder.BuildRecipient(recipient) builder.BuildContent(subject, body) Return builder.GetResult() End Function End Class ' クライアントコード Public Sub Main() Dim builder As MailBuilder = New HtmlMailBuilder() Dim director As New MailDirector(builder) Dim htmlMail As MailMessage = director.Construct("alice@example.com", "bob@example.com", "Hello", "This is HTML body.") htmlMail.Display() End Sub


0 件のコメント:

その他の記事