Implementação C ++ de padrão de fábrica simples e compreensão pessoal

índice

Prefácio

Padrão de fábrica simples

Definição de modo

Método de implementação C ++

Prós e contras do modelo

Cenários de aplicação

Aplicações específicas comuns do modo de fábrica simples

expandir


Prefácio

Design Pattern (Design Pattern) é um conjunto de experiências de design de código que é usado repetidamente, conhecido pela maioria das pessoas, classificado e catalogado, e o objetivo de usar o Design Pattern é melhorar a legibilidade, manutenção e confiabilidade do código.

Este artigo trata das dúvidas do autor sobre o modelo de fábrica simples, o modelo do método de fábrica e o modelo abstrato de fábrica durante o curso de "Padrões de Design". Após consultar os blogs dos predecessores, gostaria de compartilhar meu entendimento pessoal e consolidar os resultados do aprendizado , se houver erro, deixe uma mensagem para indicar.

Este artigo discute principalmente o padrão de fábrica simples com base nos seguintes aspectos:

  • Definição de modo
  • Método de implementação C ++
  • Prós e contras do modelo
  • Cenários de aplicação
  • Aplicações específicas comuns do modo de fábrica simples
  • expandir

Padrão de fábrica simples

Antes de aprender o modelo de fábrica simples, precisamos entender os três conceitos de "categoria de produto abstrata", "categoria de produto concreta" e "categoria de fábrica" . Como todos esses três modelos contêm a palavra-chave "fábrica", isso significa que esses padrões de projeto são abstraídos das idéias de projeto das fábricas, portanto, mapearemos esses conceitos para fábricas na vida real.

Categoria de produto específica:  é o destino de criação do padrão de fábrica simples, e todos os objetos criados atuam como instâncias de uma categoria específica desta função. Cada função de produto concreta herda a função de produto abstrata e precisa implementar os métodos abstratos declarados no produto abstrato.

Classe de produto abstrata:  É a classe pai de todos os objetos criados pela classe de fábrica e encapsula os métodos públicos de vários objetos de produto. Sua introdução irá melhorar a flexibilidade do sistema, de modo que apenas um método de fábrica comum precisa ser definido em a classe de fábrica, porque todos os objetos de produto específicos criados são objetos de subclasse.

Classe de fábrica:  É o núcleo do padrão de fábrica simples , responsável por implementar a lógica interna de criação de todas as instâncias do produto; a classe de fábrica pode ser chamada diretamente pelo mundo externo para criar os objetos de produto necessários.

Por exemplo, tome os telefones celulares como exemplo. Telefone é uma categoria de produto abstrata de todas as diferentes marcas de telefones celulares. Ele contém os recursos comuns de todos os telefones celulares - capacidade de fazer chamadas e navegar na Internet, etc .; e coisas semelhantes Huawei iPhone e telefones celulares Xiaomi (XiaomiPhone) são as categorias específicas de produtos de telefones celulares, que encapsulam suas diferentes funções e estruturas. A fábrica OEM do telefone móvel "Foxconn (Foxconn)" é uma fábrica que produz telefones móveis e completa várias marcas de acordo a diferentes planos e necessidades de design.A tarefa específica de montagem do telefone móvel; finalmente, vendeu para nós esses "clientes" através de vários canais de uso.

 

Definição de modo

Defina uma classe de fábrica, que pode retornar instâncias de diferentes classes de produtos específicos de acordo com diferentes parâmetros.As instâncias criadas geralmente têm uma classe pai comum (classe de produto abstrata).

Método de implementação C ++

O modelo de fábrica simples pode ser dividido em fábrica simples comum, fábrica simples multi-método e fábrica simples de método estático.

Usaremos um telefone celular como produto para demonstrar a realização de uma fábrica simples:

(1) Fábrica simples comum:

#include <iostream>

using namespace std;

enum PhoneType
{
    Huawei = 1;
    Xiaomi;
};


//手机的抽象产品类
class Phone
{
public:
    virtual void getPhone() = 0; //为具体产品类提供公共接口
    virtual ~Phone(){}
};

//具体产品类:华为手机类
class HuaweiPhone:public Phone
{
public:
    virtual void getPhone()
    {
        cout<<"华为手机"<<endl;
    }
};

//具体产品类:小米手机类
class XiaomiPhone:public Phone
{
public:
    virtual void getPhone()
    {
        cout<<"小米手机"<<endl;
    }
};

//工厂类
class PhoneFactory
{
public:
    virtual Phone* creatPhone(int phonetype)
    {
        Phone *m_phone = NULL;
        switch(phonetype)
        {
        case 1:
            m_phone = new HuaweiPhone(); break;
        case 2:
            m_phone = new XiaomiPhone(); break;
        default:
            break;
        }
        return m_phone;
    }
};

//客户端
int main()
{
    int i = 0;
    PhoneFactory *factory = new PhoneFactory();
    Phone *myphone = NULL;

    cout<<"输入你想要的手机(1/2):"<<endl;
    cin>>i;
    
    //根据需求生产想要的产品
    myphone = factory->creatPhone(i);
    myphone->getPhone();

    delete myphone;
    delete factory;

    system("pause");
    return 0;
}

(2) Fábrica simples multi-método

A fábrica simples multi-método é uma melhoria do modelo de fábrica comum. No modelo de fábrica comum, se o tipo de parâmetro passado estiver errado, o objeto não pode ser criado corretamente. O modelo de fábrica simples multi-método fornece vários métodos de fábrica para criar diferentes classes de produtos. Objeto.

//工厂类
class PhoneFactory
{
public:
    //华为手机的生成方法
    virtual Phone* getHuawei()
    {
        return new HuaweiPhone();
    }
    //小米手机的生成方法
    virtual Phone* getXiaomi()
    {
        return new XiaomiPhone();
    }

}

//客户端
int main()
{
    int i = 0;
    PhoneFactory *factory = new PhoneFactory();
    Phone *myphone = NULL;

    cout<<"输入你想要的手机(1/2):"<<endl;
    cin>>i;
    
    //根据需求生产想要的产品    
    if(i == 1){
        myphone = factory->getHuawei();
    }
    else{
        myphone = factory->getXiaomi();
    }
    
    myphone->getPhone();

    delete myphone;
    delete factory;

    system("pause");
    return 0;
}

(3) Fábrica simples com método estático

Defina o método de fábrica como estático, para que você possa chamar diretamente o método de fábrica estático sem criar um objeto de fábrica.

//工厂类
class PhoneFactory
{
public:
    //静态工厂方法
    static Phone* creatPhone(int phonetype)
    {
        Phone *m_phone = NULL;
        switch(phonetype)
        {
        case 1:
            m_phone = new HuaweiPhone(); break;
        case 2:
            m_phone = new XiaomiPhone(); break;
        default:
            break;
        }
        return m_phone;
    }
};

//客户端
int main()
{
    int i = 0;
    Phone *myphone = NULL;

    cout<<"输入你想要的手机(1/2):"<<endl;
    cin>>i;
    
    //根据需求生产想要的产品
    myphone = PhoneFactory::creatPhone(i);
    myphone->getPhone();

    delete myphone;

    system("pause");
    return 0;
}

 

Prós e contras do modelo

As principais vantagens são:

  • A classe de fábrica contém a lógica de julgamento necessária, que pode decidir quando criar uma instância da classe de produto. O cliente pode ser isento da responsabilidade de criar objetos de produto diretamente e apenas "consumir" produtos . O modelo de fábrica simples realiza a separação de criação e uso de objetos .
  • O cliente não precisa saber o nome da categoria da categoria de produto específica criada , apenas os parâmetros correspondentes à categoria de produto específica.Para alguns nomes de categorias complexas, o modelo de fábrica simples pode reduzir a memória do usuário em certa medida .
  • Ao introduzir arquivos de configuração, novas categorias específicas de produtos podem ser substituídas e adicionadas sem modificar nenhum código do cliente, o que melhora a flexibilidade do sistema até certo ponto.

As principais desvantagens são:

  • Como a classe fábrica concentra a lógica de criação de todos os produtos e as responsabilidades são muito pesadas , uma vez que não funcione normalmente, todo o sistema será afetado.
  • Usar o modelo de fábrica simples inevitavelmente aumentará o número de classes no sistema (introduzindo novas classes de fábrica) e aumentará a complexidade e a dificuldade de compreensão do sistema.
  • A expansão do sistema é difícil. Depois que um novo produto é adicionado, a lógica de fábrica deve ser modificada. Quando há muitos tipos de produtos, a lógica de fábrica pode ser muito complicada, o que não conduz à expansão e manutenção do sistema e viola o princípio de abertura e fechamento .
  • O modelo de fábrica simples estático usa um método de fábrica estático, que evita que a função de fábrica forme uma hierarquia com base na herança.

Cenários de aplicação

  • A classe de fábrica é responsável por criar menos objetos . Como há menos objetos criados, a lógica de negócios no método de fábrica não será muito complicada.
  • O cliente conhece apenas os parâmetros passados ​​para a classe de fábrica e não se preocupa em como criar o objeto.

Aplicações específicas comuns do modo de fábrica simples

  • Normalmente, ao usar o software Word Office, gráficos de pizza, gráficos de barras, gráficos de linhas e outros gráficos serão desenhados conforme necessário. Uma classe de fábrica pode ser fornecida para criar diferentes tipos de gráficos de acordo com a escolha do usuário.
  • O estilo de plano de fundo do espaço QQ, o estilo de plano de fundo do blog, etc. fornecem vários estilos de estilos. Fornece uma fábrica para criar diferentes estilos de fundo de acordo com os estilos específicos selecionados pelo usuário para decorar o espaço QQ.
  • Algoritmo de desconto de cinema: algoritmo de desconto como VIP 50%, ingresso de estudante 50%, cobrança normal de ingresso de adulto, etc.

expandir

(1) Por que precisamos de um modelo de fábrica simples e quais são seus benefícios?

Resposta: Se você não usar o padrão de fábrica simples, precisamos criar objetos no código do cliente. Quando vários objetos semelhantes precisam ser criados, a legibilidade do nosso código do cliente será reduzida. Afinal, o código do cliente não será como o nosso. O exemplo aqui é tão simples. Usando o modelo de fábrica simples, a tarefa de gerar objetos é entregue à fábrica, sendo que o cliente só precisa "consumir" os objetos.

Quando precisamos expandir a categoria de produto, precisamos apenas encontrar o arquivo de categoria de produto, adicionar a categoria de produto específica necessária, adicionar o código de "objeto gerado" correspondente na categoria de fábrica e, finalmente, adicionar o código de "objeto de consumidor" em o código do cliente ", isso completa a tarefa de expansão originalmente problemática.

O padrão de fábrica simples é um padrão que não atende totalmente ao "princípio de abertura e fechamento" .Quando há uma nova classe de produto específica, é necessário modificar o método de geração de objetos na classe de fábrica. O modelo de fábrica simples multi-método melhorou essa lacuna. Objetos diferentes têm métodos de geração diferentes, e o julgamento de que tipo de objeto originalmente precisava ser gerado no método de geração do objeto é entregue ao cliente para ser concluído.

Os benefícios do modelo de fábrica podem referir-se a este blog "Os benefícios do modelo de fábrica dos padrões de projeto" .

(2) O padrão de fábrica simples pode ser usado apenas para criar objetos?

Resposta: Na verdade, o padrão de fábrica simples pode ser aplicado de forma flexível, consulte este blog "Notas de trabalho C ++ - Noções básicas de padrão de fábrica simples" .

 

Acho que você gosta

Origin blog.csdn.net/gaggagaasd/article/details/107623949
Recomendado
Clasificación