Abstract Factory는 구체적인 클래스를 지정하지 않고도 관련 객체를 생성할 수 있는 창조적인 디자인 패턴입니다.
다양한 모양과 느낌 표준(예: Windows, macOS, Linux)을 지원해야 하는 GUI 툴킷을 개발한다고 상상해 보세요. 각 디자인 표준에는 버튼, 체크박스, 스크롤바 등 다양한 UI 구성요소 세트가 필요합니다.
추상 팩토리 패턴이 없으면 현재의 룩앤필 표준에 따라 이러한 구성 요소 생성을 처리하기 위해 많은 조건부 코드를 작성해야 합니다. 이 접근 방식은 확장성이 없으며 코드베이스를 유지 관리하고 확장하기 어렵게 만듭니다.
추상 팩토리 패턴을 사용하면 관련 개체군(예: 버튼, 체크박스, 스크롤 막대)을 생성하기 위한 인터페이스를 만들고 각 모양과 느낌 표준에 대해 이 인터페이스를 구현할 수 있습니다. 이러한 방식으로 클라이언트 코드는 구성 요소 생성 방법에 대한 세부 사항을 알지 못해도 모든 모양과 느낌 표준으로 작동할 수 있습니다.
클래식, 모던 등 다양한 스타일의 의자와 테이블을 생산하는 가구 공장을 생각해 보세요.
각 스타일에는 서로 다른 구성 요소(예: 다리, 등받이, 팔걸이)와 재료(예: 목재, 금속, 플라스틱)가 필요합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!