Шаблоны создания — это шаблоны проектирования, которые имеют дело с механизмами создания объектов, пытаясь создать объекты способом, подходящим для ситуации. Вот несколько примеров шаблонов создания и того, как их можно реализовать в Go:
Singleton. Шаблон Singleton гарантирует, что класс имеет только один экземпляр, предоставляя при этом глобальную точку доступа к этому экземпляру.
Copy code type Singleton struct {} var instance *Singleton func GetInstance() *Singleton { if instance == nil { instance = &Singleton{} } return instance }
Фабричный метод. Шаблон фабричного метода определяет интерфейс для создания объекта, но позволяет подклассам решать, экземпляр какого класса создавать.
Copy code type Creator interface { FactoryMethod() Product } type ConcreteCreator struct {} func (c *ConcreteCreator) FactoryMethod() Product { return &ConcreteProduct{} }
Builder: шаблон Builder отделяет построение сложного объекта от его представления, позволяя одному и тому же процессу построения создавать различные представления.
Copy code type Builder interface { Part1() Part2() Part3() } type ConcreteBuilder struct { result Product } func (b *ConcreteBuilder) Part1() { // implementation } func (b *ConcreteBuilder) Part2() { // implementation } func (b *ConcreteBuilder) Part3() { // implementation }
Прототип. Шаблон прототипа создает новые объекты путем копирования существующих объектов, которые служат прототипами.
Copy code type Prototype interface { Clone() Prototype } type ConcretePrototype struct { // fields } func (p *ConcretePrototype) Clone() Prototype { // return a new instance with the same field values }
Абстрактная фабрика. Шаблон абстрактной фабрики предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов.
Copy code type Animal interface { Speak() string } type Dog struct{} func (d *Dog) Speak() string { return "Woof" } type Cat struct{} func (c *Cat) Speak() string { return "Meow" } type AnimalFactory interface { CreateDog() Animal CreateCat() Animal } type ConcreteAnimals struct{} func (c *ConcreteAnimals) CreateDog() Animal { return &Dog{} } func (c *ConcreteAnimals) CreateCat() Animal { return &Cat{} }
Стоит отметить, что эти примеры являются упрощенными версиями каждого шаблона, и в реальных сценариях реализация может быть более сложной. Кроме того, это всего лишь несколько примеров создающих шаблонов, и существует множество других, которые можно использовать для повышения гибкости, удобства сопровождения и повторного использования вашего кода.