ホームページ >バックエンド開発 >Golang >Go デザイン パターン #Builder

Go デザイン パターン #Builder

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-12 06:18:02266ブラウズ

Go Design Patterns #Builder

ビルダー

ビルダー パターンは、複雑なオブジェクトを段階的に構築するための柔軟なソリューションを提供する創造的なデザイン パターンです。同じ構築プロセスを使用して、オブジェクトのさまざまな表現を作成できます。

問題提起

  • オブジェクトの作成に複数のステップやパラメータが含まれる場合、構築プロセスの管理が煩雑になる可能性があります。
  • 「伸縮コンストラクター」問題 (コンストラクターが多くのパラメーターを受け取る) を回避し、オブジェクトの作成後に不変であることを保証したいと考えています。

ビルダー パターンの利点

  • 柔軟性: オブジェクトのさまざまな表現を簡単に構築できます。
  • 読みやすさ: メソッドチェーンにより、構築プロセスが明確かつ簡潔になります。
  • カプセル化: 構築ロジックはビルダー内でカプセル化され、クライアント コードから分離されます。

現実世界の例

コンピューターを構築することを考えてみましょう。コンピューターには、CPU、RAM、ストレージなどのさまざまなコンポーネントが搭載されています。

コンストラクターでこれらすべてのパラメーターを必要とする代わりに、ビルダー パターンを使用すると、各コンポーネントを段階的に設定できます。

実装

package main

import "fmt"

// Product
type Computer struct {
    CPU     string
    RAM     string
    Storage string
    OS      string
}

// Builder Interface
type ComputerBuilder interface {
    SetCPU(cpu string) ComputerBuilder
    SetRAM(ram string) ComputerBuilder
    SetStorage(storage string) ComputerBuilder
    SetOS(os string) ComputerBuilder
    Build() *Computer
}

// Concrete Builder
type PCBuilder struct {
    computer *Computer
}

func NewPCBuilder() *PCBuilder {
    return &PCBuilder{&Computer{}}
}

func (b *PCBuilder) SetCPU(cpu string) ComputerBuilder {
    b.computer.CPU = cpu
    return b
}

func (b *PCBuilder) SetRAM(ram string) ComputerBuilder {
    b.computer.RAM = ram
    return b
}

func (b *PCBuilder) SetStorage(storage string) ComputerBuilder {
    b.computer.Storage = storage
    return b
}

func (b *PCBuilder) SetOS(os string) ComputerBuilder {
    b.computer.OS = os
    return b
}

func (b *PCBuilder) Build() *Computer {
    return b.computer
}

// Client Code
func main() {
    builder := NewPCBuilder()

    computer := builder.
        SetCPU("Intel i7").
        SetRAM("16GB").
        SetStorage("1TB SSD").
        SetOS("Windows 7").
        Build()

    fmt.Printf("Computer built: %+v\n", computer)
}

製品 (コンピューター): さまざまな属性を使用して構築される複雑なオブジェクトを表します。

ビルダー インターフェイス (ComputerBuilder): 製品の各コンポーネントを設定するためのメソッドを定義します。

コンクリート ビルダー (PCBuilder): ビルダー インターフェイスを実装します。

  • CPU、RAM、ストレージ、OS を設定するメソッドを提供し、メソッド チェーンのためにビルダー自体を返します。
  • Build() メソッドは、最終的な Computer オブジェクトを返します。

クライアント コード: 新しいビルダー インスタンスを作成します。

  • メソッドチェーンを使用して段階的にコンピューターを構成します。
  • Build() を呼び出して最終成果物を取得します。

以上がGo デザイン パターン #Builderの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。