ホームページ  >  記事  >  バックエンド開発  >  Go デザイン パターン #Abstract Factory

Go デザイン パターン #Abstract Factory

Susan Sarandon
Susan Sarandonオリジナル
2024-10-23 06:12:29528ブラウズ

Go Design Patterns #Abstract Factory

Abstract Factory は、具体的なクラスを指定せずに関連オブジェクトを作成できる創造的なデザイン パターンです。

問題提起

複数のルック アンド フィール標準 (Windows、macOS、Linux など) をサポートする GUI ツールキットを開発していると想像してください。各ルック アンド フィール標準には、ボタン、チェックボックス、スクロールバーなどの UI コンポーネントの異なるセットが必要です。

Abstract Factory パターンがなければ、現在のルック アンド フィール標準に基づいてこれらのコンポーネントの作成を処理するために多くの条件付きコードを記述する必要があります。このアプローチはスケーラブルではなく、コードベースの維持と拡張が困難になります。

Abstract Factory パターンを使用すると、関連オブジェクト (ボタン、チェックボックス、スクロールバーなど) のファミリーを作成するためのインターフェイスを作成し、このインターフェイスを各ルック アンド フィール標準に実装できます。このようにして、クライアント コードは、コンポーネントの作成方法の詳細を知らなくても、任意のルック アンド フィール標準で動作できます。

現実世界の例

クラシックやモダンなど、さまざまなスタイルの椅子やテーブルを製造する家具工場を考えてみましょう。

各スタイルには、異なるコンポーネントのセット (例: 脚、背もたれ、肘掛け) と材料 (例: 木材、金属、プラスチック) が必要です。

実装

  • go run abstract-factory/main.go を実行して例を実行します。
package main

import "fmt"

// Abstract Factory
type FurnitureFactory interface {
    MakeChair() Chair
    MakeTable() Table
}

func NewFurnitureFactory(style string) (FurnitureFactory, error) {
    if style == "classic" {
        return &Classic{}, nil
    }

    if style == "modern" {
        return &Modern{}, nil
    }

    return nil, fmt.Errorf("Style %s is not supported", style)
}

type Chair struct {
    Name     string
    Material string
}

type Table struct {
    Name     string
    Material string
}

// Concrete Classic Factory
type Classic struct{}

func (a *Classic) MakeChair() Chair {
    return Chair{
        Name:     "Classic Chair",
        Material: "Wood",
    }
}

func (a *Classic) MakeTable() Table {
    return Table{
        Name:     "Classic Table",
        Material: "Wood",
    }
}

// Concrete Modern Factory
type Modern struct{}

func (n *Modern) MakeChair() Chair {
    return Chair{
        Name:     "Modern Chair",
        Material: "Plastic",
    }
}

func (n *Modern) MakeTable() Table {
    return Table{
        Name:     "Modern Table",
        Material: "Plastic",
    }
}

func main() {
    factory, _ := NewFurnitureFactory("classic")

    chair := factory.MakeChair()
    table := factory.MakeTable()

    fmt.Printf("Chair: %s\n", chair.Name)
    fmt.Printf("Table: %s\n", table.Name)

    factory, _ = NewFurnitureFactory("modern")

    chair = factory.MakeChair()
    table = factory.MakeTable()

    fmt.Printf("Chair: %s\n", chair.Name)
    fmt.Printf("Table: %s\n", table.Name)
}

説明

このコードは、さまざまなスタイル (クラシックとモダン) で家具 (椅子とテーブル) を作成することにより、Abstract Factory パターンを示します。関連するオブジェクトのファミリーと各スタイルの具体的な実装を作成するためのインターフェイスを定義し、簡単なスケーラビリティとメンテナンスを可能にします。

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

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