Padrão de método de fábrica
Visão geral
- Defina uma interface para criar objetos e deixe a subclasse decidir qual classe de produto instanciar
Personagem
- Função de fábrica abstrata (Criador)
- Função de fábrica de concreto (criador de concreto)
- Função abstrata do produto (Produto)
- Papel do produto concreto
exemplo
from abc import ABCMeta,abstractmethod
class Animal(metaclass=ABCMeta):
@abstractmethod
def walk(self):
pass
class Rabbit(Animal):
def walk(self):
print("兔子行走")
class Duck(Animal):
def walk(self):
print("鸭子行走")
class AnimalFactory(metaclass=ABCMeta):
@abstractmethod
def create_animal(self):
pass
class RabbitFactory(AnimalFactory):
def create_animal(self):
return Rabbit()
class DuckFactory(AnimalFactory):
def create_animal(self):
return Duck()
vantagem
- Cada produto específico corresponde a uma classe de fábrica específica, sem necessidade de modificar o código da classe de fábrica
- Detalhes de implementação de criação de objeto oculto
Desvantagem
- Cada vez que uma categoria de produto específica é adicionada, uma categoria de fábrica específica correspondente deve ser adicionada