sábado, 17 de dezembro de 2011

Compreensão da Fábrica de Design Pattern Método


Coisas edifício pode ser difícil quando você não pode antecipar que tipo de objetos que você precisa para criar ou como criá-los. Tomemos por exemplo uma fábrica que produz um grande número de produtos. Cada produto pode ser composto de qualquer número de componentes em seu inventário. Os trabalhadores sabem o que está no inventário, mas não necessariamente sabe de antemão que tipo de produtos que estará fazendo. A Fábrica de padrão de design método pode ser aplicado a situações semelhantes na programação, onde você tem um conjunto de classes de componentes, mas não sei exatamente qual deles você vai precisar instanciar até a execução.
Neste artigo eu vou te mostrar como o padrão Factory Method pode ser usado para criar objetos diferentes, sem saber de antemão que tipo de objetos que ele precisa para criar ou como o objeto é criado.

O Factory Method
O padrão Factory Method é um padrão de projeto usado para definir uma interface de tempo de execução para a criação de um objeto. É chamado de fábrica , pois cria vários tipos de objetos sem necessariamente saber que tipo de objeto que ele cria ou como criá-lo.
Aqui está um exemplo de como o padrão de fábrica funciona. Suponha que você tenha um ProductFactory classe que cria um novo tipo de produto:

<? Php
classe ProductFactory
{
    pública estático função build ( $ type ) {
        / / Assume o uso de um carregador automático
        $ Produto = "Product_" . $ type ;
        se ( class_exists ( $ produto )) {
            retorno novos produtos $ ();
        }
        mais {
            throw novo Exceção ( "tipo de produto inválida dado." );
        }
    }
}

Através da definição de build () como um método de fábrica, agora você tem uma interface através da qual você pode criar diferentes produtos na mosca.

<? Php
/ / Construir um novo tipo de Product_Computer
$ MeuComputador = ProductFactory:: build ( "Computador" );
/ / Construir um novo tipo de Product_Tablet
$ MyTablet = ProductFactory:: build ( "Tablet" );

O padrão Factory Method é geralmente utilizado nas seguintes situações:
Uma classe não pode antecipar o tipo de objetos que ele precisa criar de antemão.
A classe exige suas subclasses para especificar os objetos que ele cria.
Você deseja localizar a lógica para instanciar um objeto complexo.

O padrão Factory Method é útil quando você precisa para a criação abstrata de um objeto de sua aplicação efectiva. Vamos dizer que a fábrica será a construção de uma "MobileDevice" tipo de produto. Um dispositivo móvel pode ser composto de qualquer número de componentes, alguns dos quais pode e vai mudar mais tarde, dependendo de avanços tecnológicos.

<? Php
classe Product_MobileDevice
{
    privados $ components ;

    público da função __construct () {
        / / Este dispositivo usa um LCD de 7 "
        $ This -> addComponent (ProductFactory:: build ( "LCD" , 7);
        / / E possui um processador ARM de 1 GHz
        $ This -> addComponent (ProductFactory:: build ( "CPU_ARM" , 1);
    }
...
}

/ / Construir um novo tipo de Product_MobileDevice
$ MyDevice = ProductFactory:: build ( "MobileDevice" );
$ MyDevice -> use ();

A lógica para criar um Product_MobileDevice objeto foi encapsulado na própria classe. Se você quer trocar os 7 "tela de LCD com 10" Touch_Screen posterior, você pode fazer a mudança isolada na classe MobileDevice sem afetar o resto de sua aplicação.

Usando fábricas Fábricas Outros
Porque a instanciação de um objeto é encapsulado, ele também pode usar fábricas de si mesmo. Para expandir ainda mais na idéia de criação do objeto abstrato, vamos usar um software não-analogia de engenharia. Uma fábrica de automóveis fabrica veículos de determinada marca, modelo e cor, mas não podem produzir todas as peças necessárias em si que são necessários para construir o veículo. Em outras palavras, ele delega a produção destas peças para fora para outras fábricas que se usa para construir novos veículos.

Sob este cenário, uma fábrica de veículos pode ter esta aparência:

<? Php

classe VehicleFactory
{
    pública estático função build ( $ make , $ modelo , $ cor ) {

        $ Veículo = novos veículos;

        / / Veículo precisa de um chassi que é produzida por outra fábrica
        $ Veículo -> addPart (VehicleChassisFactory:: build ( $ make , $ modelo ));
        / / Precisa de um motor construído por outra pessoa
        $ Veículo -> addPart (VehicleEngineFactory:: build ( $ make , $ modelo ));
        / / Ele precisa de um bodykit feito por outra fábrica
        $ Veículo -> addPart (VehicleBodyFactory:: build ( $ make , $ modelo , $ cor ));
        / / E interiores são feitos por ... você adivinhou-lo, alguém
        $ Veículo -> addPart (VehicleInteriorFactory:: build ( $ make , $ modelo , $ cor ));

        / / ... Adicionar partes mais
        retorno $ veículo ;
    }
}

/ / Construir um novo VW Amarok branco
$ MyCar = VehicleFactory:: build ( "Volkswagen" , "Amarok" , "branco" );
$ MyCar -> drive ();

Voilà! Um carro novinho em folha. O VehicleFactory classe produz um veículo de uma determinada marca, modelo e cor, mas adquiriu a várias partes produzidos por métodos outra fábrica.
Sumário
Neste artigo você aprendeu como o padrão Factory Method pode ser usado para localizar a construção de objetos diferentes e permitir que você crie objetos sem saber especificamente que tipo você vai precisar de antemão. Você também viu também métodos de fábrica pode usar métodos de outra fábrica para criar objetos objetos e definir o que os objetos que eles produzem.

Nenhum comentário :

Postar um comentário

Total de visualizações de página