Абстрактная фабрика — это творческий шаблон проектирования, который позволяет создавать связанные объекты без указания их конкретных классов.
Представьте, что вы разрабатываете набор инструментов для графического пользовательского интерфейса, который должен поддерживать несколько стандартов внешнего вида (например, Windows, macOS, Linux). Для каждого стандарта внешнего вида требуется свой набор компонентов пользовательского интерфейса, таких как кнопки, флажки и полосы прокрутки.
Без шаблона «Абстрактная фабрика» вам пришлось бы писать много условного кода для создания этих компонентов на основе текущего стандарта внешнего вида. Этот подход не масштабируем и затрудняет поддержку и расширение кодовой базы.
Используя шаблон «Абстрактная фабрика», вы можете создать интерфейс для создания семейств связанных объектов (например, кнопок, флажков, полос прокрутки) и реализовать этот интерфейс для каждого стандарта внешнего вида. Таким образом, клиентский код может работать с любым стандартом внешнего вида, не зная особенностей создания компонентов.
Представьте себе мебельную фабрику, которая производит стулья и столы в разных стилях, от классического до современного.
Для каждого стиля требуется свой набор компонентов (например, ножки, спинка, подлокотники) и материалов (например, дерево, металл, пластик).
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) }
Этот код демонстрирует шаблон «Абстрактная фабрика», создавая мебель (стулья и столы) в разных стилях (классическом и современном). Он определяет интерфейс для создания семейств связанных объектов и конкретных реализаций для каждого стиля, что обеспечивает простоту масштабирования и обслуживания.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3