English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Este artículo describe un ejemplo de diseño de patrones de programación Android: patrón de fábrica abstracta. Compartimos con ustedes para su referencia, lo siguiente es específico:
Uno, introducción
El patrón de fábrica abstracta (Abstract Factory Pattern) es uno de los patrones de diseño de creación. En la sección anterior ya hemos conocido el patrón de método de fábrica, entonces, ¿qué es este patrón de fábrica abstracta? Piense en las fábricas de la vida real, que ciertamente son específicas, es decir, cada fábrica produce un tipo de producto específico, por lo que la fábrica abstracta significa que los productos producidos son inciertos, ¿no es extraño? El patrón de fábrica abstracta tiene su origen en las soluciones gráficas para diferentes sistemas operativos en el pasado, como los controles de botones y cuadros de texto en diferentes sistemas operativos, que tienen diferentes implementaciones y diferentes efectos de visualización. Para cada sistema operativo, su propio cuerpo constituye una clase de producto, y los controles de botones y cuadros de texto también constituyen una clase de producto, dos clases de productos, dos cambios, cada uno tiene sus propias características, como Button y TextView en Android, Button y TextView en iOS, Button y TextView en Windows Phone, etc.
Dos, definición
Proporcionar una interfaz para crear un grupo de objetos relacionados o dependientes entre sí, sin necesidad de especificar sus clases específicas.
Tres, escenarios de uso
Cuando una familia de objetos tiene restricciones comunes, se puede utilizar el patrón de fábrica abstracta. ¿No suena demasiado abstracto? Aquí hay un ejemplo, en Android, iOS y Windows Phone hay aplicaciones de短信 y aplicaciones de marcación, ambas pertenecen a la categoría de Software, pero debido a que están en plataformas de sistemas operativos diferentes, incluso si el software es producido por la misma empresa, la lógica de implementación del código también es diferente. En este caso, se puede considerar usar el patrón de método de fábrica abstracta para generar aplicaciones de短信 y aplicaciones de marcación para Android, iOS y Windows Phone.
Cuatro, el diagrama de clase UML del patrón de fábrica abstracta
Diagrama de clase UML:
A pesar de que hay muchos tipos de patrones de métodos de fábrica abstracta, los principales se dividen en:4Clase:
AbstractFactory: Un rol de fábrica abstracta que declara un conjunto de métodos para crear un tipo de producto, cada uno de los cuales corresponde a un producto.
ConcreteFactory: Un rol de fábrica específica que implementa los métodos de creación de productos definidos en la fábrica abstracta, generando un conjunto de productos específicos que constituyen un tipo de producto, y cada producto se encuentra en una cierta estructura de nivel de producto.
AbstractProduct: The abstract product role, which declares interfaces for each product.
ConcreteProduct: The concrete product role, which defines the specific product object produced by the specific factory, and implements the business methods declared in the abstract product interface.
V. Simple implementation
Taking the car factory's production of car parts as an example, A and B car factories produce different tires, engines, and braking systems. Although the parts produced and the models are different, fundamentally they all have common constraints, that is, tires, engines, and braking systems.
Classes related to the tire:
public interface ITire { /** * Tire */ void tire(); } public class NormalTire implements ITire{ @Override public void tire() { System.out.println("Normal tire"); } } public class SUVTire implements ITire{ @Override public void tire() { System.out.println("SUV tire"); } }
Classes related to the engine:
public interface IEngine { /** *Engine */ void engine(); } public class DomesticEngine implements IEngine{ @Override public void engine() { System.out.println("Domestic engine"); } } public class ImportEngine implements IEngine{ @Override public void engine() { System.out.println("Imported engine"); } }
Classes related to the braking system:
public interface IBrake { /** *Braking system */ void brake(); } public class NormalBrake implements IBrake{ @Override public void brake() { System.out.println("Normal braking"); } } public class SeniorBrake implements IBrake{ @Override public void brake() { System.out.println("Advanced braking"); } }
Abstract car factory class:
public abstract class CarFactory { /** * Manufacture tire * * @return Tire * */ public abstract ITire createTire(); /** * Manufacture motor * * @return Motor * */ public abstract IEngine createEngine(); /** * Producción de sistema de frenado * * @return Sistema de frenado * */ public abstract IBrake createBrake(); }
Fábrica de coches A:
public class AFactory extends CarFactory{ @Override public ITire createTire() { return new NormalTire(); } @Override public IEngine createEngine() { return new DomesticEngine(); } @Override public IBrake createBrake() { return new NormalBrake(); } }
Fábrica de coches B:
public class BFactory extends CarFactory{ @Override public ITire createTire() { return new SUVTire(); } @Override public IEngine createEngine() { return new ImportEngine(); } @Override public IBrake createBrake() { return new SeniorBrake(); } }
Clase cliente:
public class Client { public static void main(String[] args) { //Fábrica de coches A CarFactory factoryA = new AFactory(); factoryA.createTire().tire(); factoryA.createEngine().engine(); factoryA.createBrake().brake(); System.out.println("---------------"); //Fábrica de coches B CarFactory factoryB = new BFactory(); factoryB.createTire().tire(); factoryB.createEngine().engine(); factoryB.createBrake().brake(); } }
Resultados:
Neumáticos comunes Motor nacional Frenado común ------------------ Neumáticos todoterreno Motor importado Frenado avanzado
Se puede ver que se han simulado dos fábricas de coches, si hay fábricas C y D, y los modelos y tipos de componentes producidos por cada fábrica son diferentes, entonces los archivos de clase que creamos se duplicarán. Esto también es una desventaja del patrón de fábrica abstracta, por lo que en el desarrollo real debe considerar su uso.
Seis, diferencias con el patrón de fábrica de fábrica
Se ha introducido el patrón de método de fábrica en la sección anterior, ¿cuál es la diferencia entre ellos? El patrón de fábrica abstracta es una versión mejorada del patrón de método de fábrica. La comparación es la siguiente:
Patrón de método de fábrica | Patrón de fábrica abstracta |
---|---|
Hay solo una clase de producto abstracta | Hay múltiples clases de productos abstractas |
La clase de fábrica específica solo puede crear una instancia de un producto específico | La clase de fábrica abstracta puede crear instancias de múltiples clases de productos específicos |
Siete, implementación en el código fuente
El patrón de fábrica abstracta se utiliza menos en el código fuente de Android, porque rara vez surge la situación de múltiples tipos de productos, la mayoría de los casos pueden resolverse con el patrón de método de fábrica.
MediaPlayer
La fábrica de MediaPlayer generará4Diferentes clases base de MediaPlayer: StagefrightPlayer, NuPlayerDriver, MidiFile y TestPlayerStub, todas heredan de MediaPlayerBase.
Ocho, resumen
Ventajas:
Separa la interfaz de implementación, el cliente utiliza la fábrica abstracta para crear los objetos necesarios, y el cliente no conoce quién es la implementación específica, el cliente solo se programa a través de la interfaz del producto, lo que lo desacopla de la implementación específica del producto. Al mismo tiempo, basado en la separación de interfaz e implementación, hace que el patrón de método de fábrica abstracta sea más flexible y fácil de cambiar entre tipos de productos.
Desventajas:
Primero, hay un aumento explosivo en los archivos de clase
Segundo, no es fácil expandir nuevos tipos de productos
Los lectores interesados en más contenido relacionado con Android pueden consultar las secciones especiales de este sitio: 'Tutorial de inicio y avanzado de desarrollo de Android', 'Técnicas de depuración y resumen de métodos de solución de problemas comunes de Android', 'Resumen de uso de componentes básicos de Android', 'Resumen de técnicas de View de Android', 'Resumen de técnicas de layout de Android' y 'Resumen de uso de controles de Android'.
Espero que lo descrito en este artículo pueda ayudar a todos en el diseño de programas Android.
Declaración: el contenido de este artículo se ha obtenido de la red, y pertenece al autor original. El contenido ha sido contribuido y subido por usuarios de Internet de manera autónoma. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @ para denunciar, y proporcione evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción de derechos de autor.)