Patrones de diseño (15) - Abstract Factory (fábrica) Resumen

problemas de escena

  Para la vida en ejemplo común - equipo de montaje, que reunió a los ordenadores, normalmente es necesario para seleccionar una gama de accesorios, tales como CPU, discos duros, memoria, placa base, fuente de alimentación, el chasis y así sucesivamente. Para discutir el uso de un simple punto, sólo tienen en cuenta la elección de la CPU y la placa base.

  De hecho, la elección del tiempo de CPU, se enfrentan a una serie de problemas, como la marca, modelo, número de pin, frecuencia y otros problemas, estas cuestiones sólo se finalizan con el fin de determinar la CPU específica.

  Del mismo modo, en la selección de una placa base, hay una serie de cuestiones, como la marca, el chipset, chip integrado, frecuencia del bus y otros temas, y sólo éstas se identifican con el fin de determinar la placa base específica.

  Elija una CPU y la placa base diferente, se requiere el montaje de cada cliente en el ordenador, la capacidad instalada de la empresa propuesta, es decir, cada uno de nosotros propio plan de instalación de elaboración.

  Antes de finalizar este programa instalado, también tenemos que considerar la compatibilidad total entre las diversas partes. Por ejemplo: la CPU y la placa base, si se utiliza la CPU de Intel y AMD placa base es imposible de montar. Debido a que el número de pines de la CPU no es compatible con el procesador Intel CPU toma de la placa AMD proporciona, que si se utiliza un procesador Intel CPU simplemente no podía placa madre de AMD, por lo que el programa instalado es integral, entre las diversas partes en el interior hay una opción asociación.

  Para la capacidad instalada de ingeniero, sabía montar un equipo, necesita los accesorios adecuados, pero específicamente qué tipo de accesorios utilizados por el cliente tendrá la última palabra. Ingeniero que sólo es responsable de instalar el montaje, y el cliente es responsable de seleccionar los accesorios específicos necesarios para el montaje. Por lo tanto, cuando la capacidad instalada de los ingenieros para diferentes clientes ensamblar computadoras, sólo de acuerdo a los programas instalados del cliente, para obtener las partes correspondientes, y luego ensamblados a.

El uso de una solución patrón de fábrica sencillo

  Considere al cliente, es necesario seleccionar su propia CPU necesidades y la placa base, y luego decirle a los ingenieros instalaron su propia elección, a continuación, sólo tiene que esperar ingenieros instalados equipo montado.

  Para los ingenieros instalados, sólo sé que la interfaz de la CPU y la placa base, sin conocer la aplicación específica, es evidente que se puede utilizar para el patrón de la fábrica simple o Factory Method. Por simplicidad, aquí usamos una planta sencilla. Los clientes dicen los ingenieros instalaron su propia elección, y luego instalar los ingenieros para obtener la instancia apropiada de un objeto a través de la fábrica correspondiente.

  

fuente

interfaz de la CPU y la aplicación concreta

public interface Cpu {
    public void calculate();
}
public class IntelCpu implements Cpu {
    /**
     * CPU的针脚数
     */
    private int pins = 0;
    public  IntelCpu(int pins){
        this.pins = pins;
    }
    @Override
    public void calculate() {
        // TODO Auto-generated method stub
        System.out.println("Intel CPU的针脚数:" + pins);
    }

}
public class AmdCpu implements Cpu {
    /**
     * CPU的针脚数
     */
    private int pins = 0;
    public  AmdCpu(int pins){
        this.pins = pins;
    }
    @Override
    public void calculate() {
        // TODO Auto-generated method stub
        System.out.println("AMD CPU的针脚数:" + pins);
    }
}

Placa base interfaz incorporada

public interface Mainboard {
    public void installCPU();
}
public class IntelMainboard implements Mainboard {
    /**
     * CPU插槽的孔数
     */
    private int cpuHoles = 0;
    /**
     * 构造方法,传入CPU插槽的孔数
     * @param cpuHoles
     */
    public IntelMainboard(int cpuHoles){
        this.cpuHoles = cpuHoles;
    }
    @Override
    public void installCPU() {
        // TODO Auto-generated method stub
        System.out.println("Intel主板的CPU插槽孔数是:" + cpuHoles);
    }

}
public class AmdMainboard implements Mainboard {
    /**
     * CPU插槽的孔数
     */
    private int cpuHoles = 0;
    /**
     * 构造方法,传入CPU插槽的孔数
     * @param cpuHoles
     */
    public AmdMainboard(int cpuHoles){
        this.cpuHoles = cpuHoles;
    }
    @Override
    public void installCPU() {
        // TODO Auto-generated method stub
        System.out.println("AMD主板的CPU插槽孔数是:" + cpuHoles);
    }
}

clases de fábrica de la CPU de la placa base

public class CpuFactory {
    public static Cpu createCpu(int type){
        Cpu cpu = null;
        if(type == 1){
            cpu = new IntelCpu(755);
        }else if(type == 2){
            cpu = new AmdCpu(938);
        }
        return cpu;
    }
}
public class MainboardFactory {
    public static Mainboard createMainboard(int type){
        Mainboard mainboard = null;
        if(type == 1){
            mainboard = new IntelMainboard(755);
        }else if(type == 2){
            mainboard = new AmdMainboard(938);
        }
        return mainboard;
    }
}

Ingenieros instalados y categorías de clientes resultados operativos de clase de la siguiente manera:

public class ComputerEngineer {
    /**
     * 定义组装机需要的CPU
     */
    private Cpu cpu = null;
    /**
     * 定义组装机需要的主板
     */
    private Mainboard mainboard = null;
    public void makeComputer(int cpuType , int mainboard){
        /**
         * 组装机器的基本步骤
         */
        //1:首先准备好装机所需要的配件
        prepareHardwares(cpuType, mainboard);
        //2:组装机器
        //3:测试机器
        //4:交付客户
    }
    private void prepareHardwares(int cpuType , int mainboard){
        //这里要去准备CPU和主板的具体实现,为了示例简单,这里只准备这两个
        //可是,装机工程师并不知道如何去创建,怎么办呢?
        
        //直接找相应的工厂获取
        this.cpu = CpuFactory.createCpu(cpuType);
        this.mainboard = MainboardFactory.createMainboard(mainboard);
        
        //测试配件是否好用
        this.cpu.calculate();
        this.mainboard.installCPU();
    }
}

 

public class Client {
    public static void main(String[]args){
        ComputerEngineer cf = new ComputerEngineer();
        cf.makeComputer(1,1);
    }
}

Los resultados son los siguientes:


  La realización anterior, si bien resuelto por un método de fábrica sencillo: la capacidad instalada para los ingenieros sólo conocen la interfaz de la CPU y la placa base, sin conocer los problemas específicos de la implementación. Pero hay un problema no se resuelve, de que estos objetos de la CPU y la placa base objetos en realidad están relacionados, necesidad de coincidir entre sí. La implementación anterior, no mantuvo esta relación, la CPU y la placa base están arbitrariamente seleccionados por el cliente, que es problemático. Tal como cuando el cliente llama a makeComputer, su argumento es (1,2), los resultados son como sigue:

resultado observación se verá que los problemas anteriores. Los clientes que están en Intel cantidad de pines de la CPU es 755, y la elección de la placa base es AMD, zócalo de la CPU en la placa base es 938, no se puede montar, esto no es motivo para mantener la relación entre las partes. ¿Cómo resolver este problema?  

La introducción de la Abstract Factory

  Cada patrón es una solución para ciertos problemas. patrón de la fábrica y el modo de método de fábrica abstracta la mayor diferencia es que, para el patrón método de fábrica es un producto de la estructura jerárquica, y Abstract Factory que necesita para hacer frente a la jerarquía múltiple de producto.

  En la fábrica de resumen antes de estudiar ejemplos específicos, se debe entender dos conceptos importantes: la familia de productos y nivel de producto.

  El llamado familia de productos, se refieren a la familia de productos es en una estructura jerárquica diferente, funciones asociadas con productos compuestos. Por ejemplo AMD chipset de la placa, una familia que consiste en la CPU, chipset de la placa Intel, una familia que consiste en la CPU. Las dos familias son de tres niveles de producto: Placa base, chipset, CPU. Una estructura jerárquica es la misma estructura que el diagrama de composición del producto es el siguiente:

  Obviamente, el número de productos contenidos en cada familia de productos, calidad de producto y número de estructura son iguales. estructura jerárquica del producto y de los productos de acuerdo con la familia de productos se divide en diferentes direcciones, formando un sistema de coordenadas bidimensional. El eje horizontal representa la estructura jerárquica del producto, y el eje vertical representa la familia de productos, figura familia de productos hay dos, tres productos diferentes distribuidos en la jerarquía. Mientras un producto especificar qué familia de productos, así como la estructura jerárquica a la que pertenece, sólo podemos determinar este producto.

  Tres niveles diferentes dados anteriormente estructura que tiene estructuras paralelas. Por lo tanto, si el patrón método de fábrica, se ve obligada a utilizar tres fábricas separadas estructura jerárquica para hacer frente a estos jerarquía de tres productos. Debido a la similitud de estos tres productos de estructura jerárquica, que dará lugar tres jerarquía de la instalación paralela. El número de estructura jerárquica de fábrica como el número aumenta, la estructura patrón jerárquico método de fábrica del producto dado se incrementará. La figura siguiente:

    Por lo tanto, si se puede utilizar la misma estructura jerárquica de la fábrica para hacer frente a estas estructuras idénticas o muy similares grado del producto? Por supuesto que sí, pero esa es la belleza de la Abstract Factory. La misma jerarquía de la planta responsable de crear el producto de tres objetos diferentes en la jerarquía de productos.

  Como puede verse, una jerarquía planta puede crear todos los objetos que pertenecen a una familia de productos de diferentes productos de la jerarquía. Al parecer, esta vez el patrón de fábrica abstracta de un patrón de la fábrica simple, método de fábrica es más eficiente. Correspondiente a cada uno de una familia de productos tiene una fábrica de cemento. Y cada uno es responsable de la creación de una fábrica de hormigón pertenecen a la misma familia de productos, pero pertenecen a diferentes niveles de la estructura del producto.

estructura Abstract Factory

  Resumen patrón de fábrica es para crear un modelo de objeto, que es para promover aún más el patrón método de fábrica.

  Supongamos que un subsistema necesita algunos objetos de productos, y estos productos a su vez pertenecen a más de una jerarquía de productos. Así que con el fin de crear el consumo de estos productos responsabilidad y la responsabilidad de estos productos objetos objetos separados, puede introducir Abstract Factory. En este caso, una parte involucrada directamente en productos de consumo no es necesario para crear productos de trabajo, y sólo tiene que plantar una interfaz común de productos solicitudes necesitan.

  Mediante el uso de modelo de fábrica extracto puede ser procesado con la misma (o similar) para crear un objeto de los productos en cuestión jerarquía en una pluralidad de familia de productos. Como se muestra a continuación:

  

  Desde la misma estructura jerárquica de estas dos familias de productos, el uso de la misma familia de plantas puede hacer frente a estos dos problemas para crear la familia de productos, que es el patrón de fábrica abstracta.

  Una visión estructural de la función del producto, no es difícil dada la estructura de la función de diseño de la planta.

  Como puede verse, cada personaje tiene dos métodos de fábrica fábricas fueron responsables de la creación de objetos de productos pertenecen a diferente estructura de categorías de productos.

  

fuente

  Anterior ejemplo de implementación de la interfaz de la CPU y la CPU para lograr el objeto, la tarjeta de interfaz de objetos e implementación placa base, no tiene por qué cambiar.

  Crear el ejemplo anterior CPU simplemente crear plantas y placa base planta simple, que ya no se requiere.

  Los nuevos participantes clase de fábrica abstracta y clase de implementación:

public interface AbstractFactory {
    /**
     * 创建CPU对象
     * @return CPU对象
     */
    public Cpu createCpu();
    /**
     * 创建主板对象
     * @return 主板对象
     */
    public Mainboard createMainboard();
}
public class IntelFactory implements AbstractFactory {

    @Override
    public Cpu createCpu() {
        // TODO Auto-generated method stub
        return new IntelCpu(755);
    }

    @Override
    public Mainboard createMainboard() {
        // TODO Auto-generated method stub
        return new IntelMainboard(755);
    }

}
public class AmdFactory implements AbstractFactory {

    @Override
    public Cpu createCpu() {
        // TODO Auto-generated method stub
        return new IntelCpu(938);
    }

    @Override
    public Mainboard createMainboard() {
        // TODO Auto-generated method stub
        return new IntelMainboard(938);
    }

}

  Ingenieros instalados en frente de la clase, en comparación con la realización, los principales cambios son: la CPU y los parámetros de selección de entrada de la placa base desde el cliente ya no está, pero directamente en el cliente ha elegido un buen producto objeto. Esto evita que la posibilidad de escoger los temas de compatibilidad de CPU y la placa madre derivadas de que el cliente elija está establecido, es una serie.

public class ComputerEngineer {
    /**
     * 定义组装机需要的CPU
     */
    private Cpu cpu = null;
    /**
     * 定义组装机需要的主板
     */
    private Mainboard mainboard = null;
    public void makeComputer(AbstractFactory af){
        /**
         * 组装机器的基本步骤
         */
        //1:首先准备好装机所需要的配件
        prepareHardwares(af);
        //2:组装机器
        //3:测试机器
        //4:交付客户
    }
    private void prepareHardwares(AbstractFactory af){
        //这里要去准备CPU和主板的具体实现,为了示例简单,这里只准备这两个
        //可是,装机工程师并不知道如何去创建,怎么办呢?
        
        //直接找相应的工厂获取
        this.cpu = af.createCpu();
        this.mainboard = af.createMainboard();
        
        //测试配件是否好用
        this.cpu.calculate();
        this.mainboard.installCPU();
    }
}

El código de cliente:

public class Client {
    public static void main(String[]args){
        //创建装机工程师对象
        ComputerEngineer cf = new ComputerEngineer();
        //客户选择并创建需要使用的产品对象
        AbstractFactory af = new IntelFactory();
        //告诉装机工程师自己选择的产品,让装机工程师组装电脑
        cf.makeComputer(af);
    }
}

  función de la fábrica abstracta es crear una interfaz como una serie de objetos relacionados u objetos interdependientes. Hay que señalar que el método en esta interfaz no es cualquier relleno, sino una serie de métodos relacionados o interdependientes. Por ejemplo, en el ejemplo anterior la placa base y la CPU, que es montar un relacionados con la informática objetos. Los diferentes programas de la capacidad instalada, representa una serie específica de PC.

  

  
  Debido a una serie de objetos definidos en la fábrica abstracta generalmente está relacionada o dependiente, estos productos constituyen una familia de productos objetivo, que es la fábrica abstracta define una familia de productos.

  Esto aporta una gran flexibilidad a la familia de productos interruptor, siempre y cuando que proporciona diversa fábrica abstracta para lograrlo, que ahora es una familia de productos en su conjunto se haya cambiado.


¿En qué circunstancias deben utilizar el patrón de fábrica abstracta

  1. Un sistema no debe depender de cómo se crea la instancia de clase de productos, una combinación de detalles y de expresión, que son importantes para todas las formas del patrón de la fábrica.

  2. El producto de este sistema tiene más de una familia de productos, y el único sistema en el que una familia de productos de consumo.

  3. pertenecen a la misma familia de productos de los productos se utilizan juntos, las restricciones deben reflejarse en el diseño del sistema. (Ejemplo: Intel placa base debe utilizar Intel CPU, Intel chipset)

  4. El sistema proporciona una biblioteca de clases de productos, todos los productos que aparecen en la misma interfaz, de manera que el cliente no depende de la implementación.

El origen de la Abstract Factory

  O el origen de las primeras aplicaciones de la Abstract Factory se utiliza para crear el sistema operativo Windows pertenecen a diferentes edificio. Por ejemplo: Botón de comando (botón) y el cuadro de texto (Text) las ventanas se construyen en el sistema operativo UNIX, Windows y entorno de los sistemas operativos de Windows entorno Windows, ambos construidos con diferentes implementación local, sus detalles son diferentes .

  En cada sistema operativo, hay una ventana. La construcción de la composición familiar. Aquí está la composición de botón y texto familia de productos. Y cada miembro de la ventana constituye su estructura jerárquica está dada por una descripción abstracta de la función de carácter abstracto, dada por las subclases concretas incorporadas en diferentes sistemas operativos.

  


  Los productos anteriores se pueden encontrar en el diagrama de clases, la estructura jerárquica de los dos productos, respectivamente, de texto y botón de jerarquía de la estructura jerárquica. Al mismo tiempo, hay dos familias de productos, que es la familia de productos de la familia de productos UNIX y Windows. La familia de productos UNIX consta de botón UNIX y productos de texto UNIX, y la familia de productos Windows consta de botón de Windows y productos de texto de Windows.

    El sistema crea la demanda para la segmentación de producto por una estructura jerárquica del proyecto se cumplan, incluyendo el papel de dos proyectos específicos, a saber UnixFactory y WindowsFactory. UnixFactory objeto es responsable de la creación de la familia de productos de productos de Unix, y el objeto WindowsFactory es responsable de crear una familia de productos de productos de Windows. Se trata de la aplicación, las soluciones Abstract Factory Abstract Factory en la siguiente figura:

  

  Es evidente que un sistema sólo puede ejecutar un sistema operativo en el entorno de Windows, pero no se puede ejecutar en diferentes sistemas operativos. Por lo tanto, el sistema de realidad consumen solamente pertenecen a la misma familia de productos de los productos.

  En las aplicaciones modernas, el uso de la Abstract Factory se ha ampliado considerablemente, y el sistema ya no requiere sólo un consumidor de una familia de productos. Por lo tanto, no podemos ignorar la intención original se ha mencionado anteriormente.

Resumen de fábrica ventaja patrón

  • La separación de interfaz y la implementación

  El cliente utiliza la fábrica abstracta para crear los objetos necesarios, y los clientes que no conocen la implementación específica, el cliente sólo orientada sólo productos de interfaz de programación. En otras palabras, el cliente desacoplada de las implementaciones específicas del producto.

  • La familia de productos de conmutación se convierten fácilmente en

  Debido a que una aplicación específica de la fábrica representa una familia de productos, como el ejemplo anterior, sólo se necesita mirar a la fábrica de hormigón cambiado de Intel a AMD serie serie.

Deficiencia Abstract Factory

  • No es fácil de ampliar nuevos productos

  Si es necesario agregar un nuevo producto a toda la familia de productos, a continuación, es necesario modificar la fábrica abstracta, lo que llevaría a una revisión de toda la clase de la aplicación de la fábrica.

Publicados 295 artículos originales · ganado elogios 37 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/tianshan2010/article/details/104722394
Recomendado
Clasificación