Patrón de diseño | Patrón abstracto de fábrica

1 | Descripción general del patrón de fábrica abstracto

1.1 Idea básica

El patrón de método de fábrica resuelve el problema de responsabilidades demasiado pesadas de la clase de fábrica en el patrón de fábrica simple al introducir la jerarquía de fábrica. Sin embargo, debido a que cada fábrica específica en el patrón de método de fábrica tiene solo uno o un conjunto de métodos de fábrica sobrecargados, solo uno Se puede producir el método de fábrica Este tipo de productos puede resultar en un gran número de fábricas en el sistema, lo que inevitablemente aumentará los gastos generales del sistema. A veces, puede ser necesario que una fábrica proporcione varios objetos de producto en lugar de un solo objeto de producto. Por ejemplo, una fábrica de electrodomésticos puede producir varios electrodomésticos, como televisores, refrigeradores y aires acondicionados, en lugar de un solo tipo de electrodomésticos. . En este punto, puede considerar combinar algunos productos relacionados en una "familia de productos", que es producida por la misma fábrica Esta es la idea básica del modelo abstracto de fábrica que se aprenderá en este capítulo.

1.2 Explicación del sustantivo

El patrón de fábrica abstracto es uno de los patrones de diseño de creación más utilizados, que tiene un mayor grado de abstracción que el patrón de fábrica (método). En el modo de fábrica (método), cada fábrica específica solo necesita producir un producto específico, pero en el modo de fábrica abstracto, una fábrica específica puede producir un grupo de productos específicos relacionados, tal grupo de productos se llama familia de productos, cada El producto de la familia de productos pertenece a una determinada jerarquía de herencia de productos.

 Antes de comprender el patrón de fábrica abstracto, primero comprendemos los siguientes dos conceptos sustantivos:

  • (1) Estructura jerárquica del producto : la estructura jerárquica del producto es la estructura de herencia del producto. Por ejemplo, una categoría abstracta es TV y sus subcategorías incluyen Haier TV, Hisense TV y TCL TV, luego TV abstracta y una marca específica TV A La estructura a nivel de producto se forma entre ellos. Los televisores abstractos son la categoría principal y los televisores de marcas específicas son sus subcategorías.
  • (2) Familia de productos : en el modelo de fábrica abstracto, la familia de productos se refiere a un grupo de productos que son producidos por la misma fábrica y están ubicados en diferentes estructuras jerárquicas de productos. Por ejemplo, los televisores Haier y los refrigeradores Haier producidos por Haier Electrical Appliances Factory, los televisores Haier están en la jerarquía de productos de televisión, los refrigeradores Haier están en la jerarquía de productos de refrigeradores, los televisores Haier y los refrigeradores Haier forman una familia de productos.

1.3 Definición de patrón de fábrica abstracto

El patrón de fábrica abstracto proporciona una solución para crear un conjunto de objetos. En comparación con el modelo de fábrica, el capataz específico en el modelo de fábrica abstracto no es solo para crear un producto, sino también para crear una familia de productos.

  • Patrón de fábrica abstracto: proporciona una interfaz para crear una serie de objetos relacionados o interdependientes sin especificar sus clases específicas.
  • Abstract Factory Pattern: proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.

El patrón de fábrica abstracto también se denomina patrón de herramienta (Ki) , que es un patrón de creación de objetos.


2 | Estructura y realización de la fábrica abstracta

2.1 La estructura del
patrón de fábrica abstracto En el patrón de fábrica abstracto, cada fábrica de concreto proporciona múltiples métodos de fábrica para producir una variedad de diferentes tipos de productos, y estos productos constituyen una familia de productos. 
El patrón de fábrica abstracto incluye los siguientes 4 roles:

  • (1) AbstractFactory : Declara un conjunto de métodos para crear una familia de productos, y cada método corresponde a un producto.
  • (2) ConcreteFactory (fábrica de concreto) : Implementa el método de declarar y crear productos en la fábrica abstracta, y genera un conjunto de productos de concreto, estos productos constituyen una familia de productos, y cada producto se ubica en una determinada jerarquía de productos.
  • (3) AbstractProduct (producto abstracto) : Declara la interfaz para cada producto y declara los métodos comerciales del producto en el producto abstracto.
  • (4) Producto de hormigón (producto de hormigón) : define el objeto de producto de hormigón producido por la fábrica de hormigón y realiza el método comercial declarado en la interfaz de producto abstracto.

2.2 Implementación del patrón de fábrica abstracta
En la fábrica abstracta, se declaran múltiples métodos de fábrica para crear diferentes tipos de productos.La fábrica abstracta puede ser una interfaz, una clase abstracta o una clase concreta. El código típico es el siguiente:
un ejemplo de aplicación, una empresa quiere desarrollar un conjunto de biblioteca de máscaras, software de escritorio basado en la plataforma .NET para embellecer la interfaz.

Diseño de código:

  • La interfaz ISkinFactory actúa como una fábrica abstracta, y sus subclases SpringSkinFactory y SummerSkinFactory actúan como fábricas concretas.
  • Las interfaces IButton, IComboBox e ITextFiled actúan como productos abstractos, y sus subclases SpringButton, SpringComboBox, SpringTextFiled y SummerButton, SummerComboBox y SummerTextFiled actúan como productos concretos.

ISkinFactory

/// <summary>
/// 界面皮肤工厂接口,充当抽象工厂
/// </summary>
interface ISkinFactory
{
    IButton CreateButton();
    ITextFiled CreateTextFiled();
    IComboBox CreateComboBox();
}

PrimaveraPielFábrica

/// <summary>
/// Spring 皮肤工厂,充当具体工厂
/// </summary>
class SpringSkinFactory : ISkinFactory
{
    public IButton CreateButton()
    {
        return new SpringButton();
    }

    public IComboBox CreateComboBox()
    {
        return new SpringComboBox();
    }

    public ITextFiled CreateTextFiled()
    {
        return new SpringTextFiled();
    }
}

IButton

/// <summary>
/// 按钮接口,充当抽象产品
/// </summary>
interface IButton
{
    void Display();
}

Botón de resorte 

/// <summary>
/// Spring 按钮类,充当具体产品
/// </summary>
class SpringButton : IButton
{
    public void Display()
    {
        Console.WriteLine("显示浅绿色的按钮。");
    }
}

Llamada principal en el Programa cliente

//xml配置文件与反射方式扩展
// 1.读取【App.config】配置文件
string factoryString = ConfigurationManager.AppSettings["spring"];
ISkinFactory skinFactory = (ISkinFactory)Assembly.Load("AbstractFactoryPattern").CreateInstance(factoryString);
IButton ibtn = skinFactory.CreateButton();
IComboBox iComBox = skinFactory.CreateComboBox();
ITextFiled iTextFiled = skinFactory.CreateTextFiled();

ibtn.Display();
iComBox.Display();
iTextFiled.Display();

Otras implementaciones son similares, omitidas aquí, vea la demostración de código completa =》https://gitee.com/dolayout/DesignPatternOfCSharp/tree/master/DesignPatternOfCSharp/AbstractFactoryPattern

3 | Inclinación del principio de apertura y cierre en el modelo de fábrica abstracto

La biblioteca de máscaras de interfaz anterior puede agregar fácilmente nuevos tipos de bibliotecas de máscaras, pero este esquema de diseño tiene un problema muy serio: si el diseño no es completo al principio del diseño, un cierto tipo de componente de interfaz (como un botón de radio) se olvida. Proporcione una visualización de estilo bajo diferentes aspectos, entonces le resultará muy problemático agregar botones de opción al sistema. Es imposible agregar botones de opción bajo la premisa de satisfacer el principio de apertura y cierre. La razón es que el resumen factory ISkinFactory no proporciona la creación de botones de radio en absoluto. Si necesita agregar este botón, primero debe modificar la interfaz de fábrica abstracta ISkinFactory, agregar un método para crear un botón de radio en él y luego modificar las clases de fábrica específicas en el clases derivadas una por una, y agregue los métodos correspondientes para usarlos en diferentes bibliotecas de aspectos. Para crear un botón de opción, también debe modificar el cliente, de lo contrario, el botón de opción no se puede usar en el sistema existente.

El patrón de fábrica abstracto no puede resolver bien estos problemas, y esta es también la mayor desventaja del patrón de fábrica abstracto. En la fábrica abstracta, es conveniente agregar una nueva familia de productos, pero es problemático agregar una nueva estructura jerárquica de productos.Esta característica del modelo de fábrica abstracta se denomina tendencia del principio de apertura y cierre. El principio de apertura y cierre requiere que el sistema esté abierto para extensión y cerrado para modificación. El propósito de mejorar sus funciones a través de la extensión es lograr el propósito de mejorar sus funciones. Para sistemas que involucran múltiples familias de productos y múltiples estructuras jerárquicas de productos, su Las mejoras de funciones incluyen los dos puntos siguientes:

  • (1) Agregar familia de productos: correspondiente a la familia de productos recién agregada, el modelo de fábrica abstracto apoya bien el principio de apertura y cierre. Solo necesita agregar productos específicos y, en consecuencia, agregar una nueva fábrica específica. No hay necesidad de códigos existentes .Cualquier modificación.
  • (2) Adición de una nueva estructura de nivel de producto: en correspondencia con la adición de una nueva estructura de nivel de producto, es necesario modificar todas las funciones de la fábrica, incluidas las clases abstractas de fábrica, y agregar nuevos métodos de producto a todas las clases de fábrica, lo que viola el principio de apertura y cierre.

El modelo abstracto de fábrica es una forma inclinada de cumplir con los principios de apertura y cierre, por lo que el diseñador debe considerarlo de manera integral al comienzo del diseño, de lo contrario, causará cambios importantes en el sistema y traerá muchos problemas y riesgos para el mantenimiento posterior. trabaja.

4 | Las ventajas y desventajas y los escenarios aplicables del patrón de fábrica abstracto

El patrón de fábrica abstracto es una extensión adicional del patrón de fábrica (método). Debido a que proporciona una clase de fábrica más poderosa y tiene una mejor escalabilidad, se usa ampliamente en el desarrollo de software, especialmente en algunos marcos y bibliotecas API en el diseño. El patrón de fábrica abstracto es uno de los patrones de diseño más utilizados en el desarrollo de software.
4.1 Las principales ventajas del patrón de fábrica abstracto

  • (1) El patrón de fábrica abstracto aísla la generación de clases concretas, por lo que el cliente no necesita saber qué se creó. Debido a este aislamiento, es relativamente fácil reemplazar una fábrica de concreto. Todas las fábricas de concreto implementan las interfaces públicas definidas en la fábrica abstracta. Por lo tanto, solo cambiando la instancia de la fábrica de concreto, todo el sistema de software se puede cambiar hasta cierto punto. .el comportamiento de.
  • (2) Cuando se diseñan varios objetos de una familia de productos para que funcionen juntos, se puede garantizar que el cliente siempre utilice solo los objetos de la misma familia de productos.
  • (3) El modelo de fábrica abstracto es muy conveniente para agregar nuevas familias de productos, sin modificar el sistema existente, y se ajusta al principio de apertura y cierre.

4.2 Las principales deficiencias del modelo de fábrica abstracta. Es
problemático agregar una nueva estructura a nivel de producto, requiriendo modificaciones importantes al sistema original, e incluso la necesidad de modificar el código de la capa abstracta, lo que obviamente trae mayores inconvenientes y viola el principio de abriendo y cerrando.

4.3 Entorno aplicable del patrón de fábrica abstracto

  • (1) Un sistema no debe depender de los detalles de cómo se crean, combinan y expresan las instancias de clases de productos. Esto es importante para todo tipo de modelos de fábrica. Los usuarios no necesitan preocuparse por el proceso de creación de objetos y resolver el creación y uso de objetos.
  • (2) Hay más de una familia de productos en el sistema, pero solo se usa una familia de productos cada vez. Los usuarios pueden cambiar dinámicamente la familia de productos a través de archivos de configuración y otros métodos, y también pueden agregar fácilmente nuevas familias de productos.
  • (3) Los productos que pertenecen a la misma familia de productos se utilizarán juntos y esta restricción debe reflejarse en el diseño del sistema. Los productos de la misma familia de productos pueden ser objetos no relacionados, pero todos tienen algunas restricciones comunes, como botones y cuadros de texto en el mismo sistema operativo. No existe una relación directa entre los botones y los cuadros de texto, pero todos pertenecen a Para un determinado sistema operativo, existe una restricción común en este momento: el tipo de sistema operativo.
  • (4) La estructura de grado del producto es estable. Una vez completado el diseño, no se agregará al sistema una nueva estructura de grado del producto o no se eliminará la estructura de grado del producto existente.

Supongo que te gusta

Origin blog.csdn.net/ChaITSimpleLove/article/details/114496161
Recomendado
Clasificación