Статья
Шаблон проектирования "Фабричный метод"

Шаблон проектирования "Фабричный метод"

11 февраля 2020

Относится к порождающим шаблонам.

Выносит реализацию создания объектов в подклассы.

Плюсы
- создание объектов независимо от кода, который их использует


Пример на PHP

Создадим интерфейс Car и 2 реализации - Audi и Mercedes.

interface Car
{
    public function getName();
}

class Audi implements Car
{
    public function getName()
    {
        echo 'Audi';
    }
}

class Mercedes implements Car
{
    public function getName()
    {
        echo 'Mercedes';
    }
}

Создадим фабричные методы.

interface CarCreator {
    public function create();
} 
 
class AudiCreator implements CarCreator {
    public function create() {
        return new Audi();  
    }
}

class MercedesCreator implements CarCreator {
    public function create() {
        return new Mercedes();  
    }
}

Использование:

$creator = new MercedesCreator();
$mercedes = $creator->make();


Пример на Go

package main

type ICar interface {
   GetName() string
}

type Audi struct {
}

func (c *Audi) GetName() string {
   return "Audi"
}

type Merdeces struct {
}

func (c *Merdeces) GetName() string {
   return "Mercedes"
}

// Фабрики

type ICarCreator interface {
   Create() ICar
}

type AudiCreator struct {
}

type MercedesCreator struct {
}

func (c AudiCreator) Create() ICar {
   return &Audi{}
}

func (c MercedesCreator) Create() ICar {
   return &Merdeces{}
}

func main() {
   creator := MercedesCreator{}
   creator.Create()
}


Источники:
http://designpatternsphp.readthedocs.io/ru/latest/Creational/FactoryMethod/README.html
https://habrahabr.ru/company/mailru/blog/325492/