Шаблон проектирования "Фабричный метод"
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/