Definición:
El patrón de fábrica sigue siendo un patrón de diseño de creación. Como fábrica, se preocupa por la producción de productos, es decir, la creación de objetos. Utilizamos fábricas para crear objetos sin tener que crearlos nosotros mismos. No necesitamos entender cómo crear objetos. Solo necesita hacer una solicitud a la fábrica y dejar que la fábrica produzca los productos que desea y los objetos correspondientes para usted de acuerdo con sus requisitos. Este modelo se llama modelo de fábrica.
Ventajas del modo de fábrica:
- Acoplados libremente, los objetos creados son independientes de la implementación de la clase
- El usuario no necesita conocer la clase del objeto creado, solo la interfaz, los parámetros y los métodos pasados. Luego puede crear los objetos necesarios.
- Fácil de ampliar. La fábrica agrega otros tipos de tipos de datos, solo necesita modificar los parámetros.
Darse cuenta:
Modo simple de fábrica "1":
de abc import ABCMeta, abstractmethod # ABCMeta es una metaclase de Python, utilizada para crear clases base abstractas en programas Python, métodos abstractos declarados en clases base abstractas, decorados con decorador de métodos abstractos. clase Coca-Cola (metaclase = ABCMeta): @abstractmethod def drink (self): pass class Coca (Coke): def drink (self): print ( ' drink Coca-Cola ' ) class Pepsi (Coke): def drink (self): print ( ' beber Pepsi-Cola ' ) clase Fast_food_restaurant (): defmake_coke (self, name): return eval (name) () KCD = Fast_food_restaurant () coke = KCD.make_coke ( ' Coca ' ) coke.drink () # drink Coca-Cola eval (nombre de clase) devuelve un tipo de clase Nuestro objetivo es crear una clase abstracta de Coca-Cola. Pepsi y Coca-Cola heredan esta clase abstracta. También hemos establecido una clase de restaurante de comida rápida, también conocida como la clase de fábrica, para que produzca Coca-Cola. Cuando el usuario necesite coca cola, solo dígale al restaurante de comida rápida qué marca de coca tiene que hacer, dígale el nombre de la cola del restaurante de comida rápida, y luego el restaurante de comida rápida usa el método make_coke para hacer cola, y devuelve el objeto que necesita: una taza de Coca-Cola, y luego puede Feliz bebiendo cola. .
Modo de método de fábrica "2"
from abc import ABCMeta, abstractmethod class Coke (metaclass = ABCMeta): @abstractmethod def drink (self): pass class Coca (Coke): def drink (self): print ( ' drink Coca-Cola ' ) class Pepsi (Coke): def drink (self): print ( ' drink Pepsi-Cola ' ) clase Sfencs (Coca-Cola): def drink (self): print ( ' drink Sfencs-Cola ') clase Fast_food_restaurant (metaclass = ABCMeta): @abstractmethod def make_coke (self): pass class Coca_produce (Fast_food_restaurant): def make_coke (self): return Coca () class Pepsi_produce (Fast_food_restaurant): def make_coke (self): return Pepsi () clase Sfencs_produce (Fast_food_restaurant): def make_coke (self): return Sfencs () KCD = Sfencs_produce () coke = KCD.make_coke () coke.drink ()# beber El patrón de método de fábrica de Sfencs-Cola convierte la clase de fábrica original en una clase abstracta, se producen diferentes tipos de cola a través de diferentes subclases, es decir, el patrón de método de fábrica define una interfaz para crear objetos, pero qué clase de objetos es creada por La subclase decide que el juicio lógico de esta manera es equivalente a entregar al cliente, es decir, KCD = Sfencs_produce () elegir qué subclase usar, de modo que si aparece un nuevo producto de Coca-Cola, solo necesita escribir una herencia de subclase Clase abstracta de fábrica.
Patrón abstracto de fábrica "3"
El objetivo principal del patrón de fábrica abstracto es proporcionar una interfaz para crear una serie de objetos relacionados sin especificar una clase específica. La diferencia entre este patrón y el patrón de método de fábrica es que una subclase de método puede crear una serie de objetos. from abc import ABCMeta, abstractmethod class Ice_coke (metaclass = ABCMeta): @abstractmethod def drink (self): pass class Ordinary_coke (metaclass = ABCMeta): @abstractmethod def drink (self): pass class Coca_ice (Ice_coke): def drink (self ): print ( ' drink Coca-ice-Cola ' ) clase Pepsi_ice (Ice_coke): def drink (self): print ( ' drink Pepsi-ice-Cola ' ) class Coca_ordinary (Ordinary_coke): def drink (self): print ( ' drink Coca-ordinary-Cola ' ) class Pepsi_ordinary (Ordinary_coke): def drink (self): print ( ' drink Pepsi-ordinary-Cola ' ) clase Fast_food_restaurant (metaclass = ABCMeta): @abstractmethod def make_ice_coke (self): pass @abstractmethod def make_ordinary_coke (self): Pase la clase Coca_produce (Fast_food_restaurant): def make_ice_coke (self): return Coca_ice () def make_ordinary_coke (self): return Coca_ordinary () class Pepsi_produce (Fast_food_restaurant): def make_ice_coke (self): return Pepsi_ice () def make_ordinary_coke ( return Pepsi_ordinary () KCD = Coca_produce () coke = KCD.make_ice_coke () coke.drink () # drink Coca-ice-Cola