>  기사  >  백엔드 개발  >  디자인 패턴으로 이동 #추상 팩토리

디자인 패턴으로 이동 #추상 팩토리

Susan Sarandon
Susan Sarandon원래의
2024-10-23 06:12:29528검색

Go Design Patterns #Abstract Factory

Abstract Factory는 구체적인 클래스를 지정하지 않고도 관련 객체를 생성할 수 있는 창조적인 디자인 패턴입니다.

문제 설명

다양한 모양과 느낌 표준(예: Windows, macOS, Linux)을 지원해야 하는 GUI 툴킷을 개발한다고 상상해 보세요. 각 디자인 표준에는 버튼, 체크박스, 스크롤바 등 다양한 UI 구성요소 세트가 필요합니다.

추상 팩토리 패턴이 없으면 현재의 룩앤필 표준에 따라 이러한 구성 요소 생성을 처리하기 위해 많은 조건부 코드를 작성해야 합니다. 이 접근 방식은 확장성이 없으며 코드베이스를 유지 관리하고 확장하기 어렵게 만듭니다.

추상 팩토리 패턴을 사용하면 관련 개체군(예: 버튼, 체크박스, 스크롤 막대)을 생성하기 위한 인터페이스를 만들고 각 모양과 느낌 표준에 대해 이 인터페이스를 구현할 수 있습니다. 이러한 방식으로 클라이언트 코드는 구성 요소 생성 방법에 대한 세부 사항을 알지 못해도 모든 모양과 느낌 표준으로 작동할 수 있습니다.

실제 사례

클래식, 모던 등 다양한 스타일의 의자와 테이블을 생산하는 가구 공장을 생각해 보세요.

각 스타일에는 서로 다른 구성 요소(예: 다리, 등받이, 팔걸이)와 재료(예: 목재, 금속, 플라스틱)가 필요합니다.

구현

  • 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)
}

설명

이 코드는 다양한 스타일(클래식 및 현대)의 가구(의자 및 테이블)를 만들어 추상 팩토리 패턴을 보여줍니다. 관련 개체군을 생성하고 각 스타일에 대한 구체적인 구현을 생성하기 위한 인터페이스를 정의하여 확장성과 유지 관리가 용이합니다.

위 내용은 디자인 패턴으로 이동 #추상 팩토리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.