Pular para conteúdo

Factory Method

Definição (GoF): "Definir uma interface para criar um objeto mas deixar que subclasses decidam que classe instanciar. Factory Method permite que uma classe delegue a responsabilidade de instanciamento às subclasses.


Problema

  • O acesso a um objeto concreto será feito através da interface conhecida pela superclasse.
  • Porém, o cliente não quer (ou não pode) conhecer qual implementação concreta está sendo usada.
  • Como criar objetos sem acoplar o código cliente às classes concretas

Solução

  • O Factory Method define uma interface comum para criar objetos.
  • As subclasses do criador determinam qual classe concreta será instanciada.
  • O cliente chama o método de criação da superclasse sem precisar conhecer os concretos.
  • Assim, o conhecimento das classes concretas fica encapsulado no criador, e não no cliente.

Estrutura UML

classDiagram
direction LR
  class Creator {
    +getShape(): Shape
  }
  class ShapeFactory {
    <<abstract>>
    +getShape(): Shape
  }
  class CircleFactory {
    -x: double
    -y: double
    -size: int
    +getShape(): Shape
  }
  class Shape
  class Circle

  Creator <|-- ShapeFactory
  ShapeFactory <|-- CircleFactory
  Shape <|-- Circle
  ShapeFactory ..> Shape : cria
  CircleFactory ..> Circle : cria