Padrão de fábrica abstrato: obtenha o objeto e ignore o processo de implementação


1. Introdução

1.1. Definição

Abstract Factory Pattern (Abstract Factory Pattern) é em torno de umFábrica abstratacrioOutras fábricas. O padrão de fábrica abstrato fornece uma interface para criar uma série de objetos relacionados ou interdependentes sem especificar suas classes específicas.


1.2 Cenários aplicáveis

	- 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。
	- 强调一系列相关的产品对象(属于同一产品)一起使用创建对象需要大量的重复代码。
	- 提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现。


1.3, vantagens

  • O isolamento do código de produtos específicos na camada de aplicativo não precisa se preocupar com os detalhes de criação.
  • Crie uma série de produtos juntos.


1.4. Desvantagens

  • Todos os conjuntos de produtos que podem ser criados são especificados e é difícil expandir novos produtos no cluster de produtos.
  • Aumente a abstração do sistema e a dificuldade de compreensão.


2. Perceba


Considere os telefones celulares e roteadores de produtos correspondentes da Huawei e da Xiaomi como exemplos


Etapa 1. Definir a interface do produto

//手机产品接口
public interface IphoneProduct {
    
    
    void start();
    void shutdown();
    void callup();
    void sendSMS();
}
//路由器产品接口
public interface IRouterProduct {
    
    
    void start();
    void shutdown()
    void openWife();
    void setting();
}



Etapa 2. Crie um produto correspondente à interface

//华为手机
public class HuaweiPhone implements IphoneProduct {
    
    
    @Override
    public void start() {
    
    
        System.out.println("开启华为手机");
    }

    @Override
    public void shutdown() {
    
    
        System.out.println("关闭华为手机");
    }

    @Override
    public void callup() {
    
    
        System.out.println("华为打电话");
    }

    @Override
    public void sendSMS() {
    
    
        System.out.println("华为发短信");
    }
}

//华为路由器
public class HuaweiRouter implements IRouterProduct {
    
    
    @Override
    public void start() {
    
    
        System.out.println("启动华为路由器");
    }

    @Override
    public void shutdown() {
    
    
        System.out.println("关闭华为路由器");
    }

    @Override
    public void openWife() {
    
    
        System.out.println("打开华为Wife");
    }

    @Override
    public void setting() {
    
    
        System.out.println("华为设置");
    }
}

//小米手机
public class XiaomiPhone implements IphoneProduct {
    
    
    @Override
    public void start() {
    
    
        System.out.println("开启小米手机");
    }

    @Override
    public void shutdown() {
    
    
        System.out.println("关闭小米手机");
    }

    @Override
    public void callup() {
    
    
        System.out.println("小米打电话");
    }

    @Override
    public void sendSMS() {
    
    
        System.out.println("小米发短信");
    }
}

//小米路由器
public class XiaomiRouter implements IRouterProduct {
    
    
    @Override
    public void start() {
    
    
        System.out.println("启动小米路由器");
    }

    @Override
    public void shutdown() {
    
    
        System.out.println("关闭小米路由器");
    }

    @Override
    public void openWife() {
    
    
        System.out.println("打开小米Wife");
    }

    @Override
    public void setting() {
    
    
        System.out.println("小米设置");
    }
}



Etapa 3. Criar fábrica abstrata

//抽象产品工厂
public interface IProductFactory {
    
    
    //生产手机
    IphoneProduct iphoneProduct();

    //生产路由器
    IRouterProduct routerProduct();
}



Etapa 4. Crie outras fábricas

public class XiaomiFactory implements IProductFactory {
    
    
    @Override
    public IphoneProduct iphoneProduct() {
    
    
        return new XiaomiPhone();
    }

    @Override
    public IRouterProduct routerProduct() {
    
    
        return new XiaomiRouter();
    }
}
public class HuaweiFactory implements IProductFactory {
    
    
    @Override
    public IphoneProduct iphoneProduct() {
    
    
        return new HuaweiPhone();
    }

    @Override
    public IRouterProduct routerProduct() {
    
    
        return new HuaweiRouter();
    }
}





Aprenda sobre outros padrões de design

Acho que você gosta

Origin blog.csdn.net/qq_44972847/article/details/108058748
Recomendado
Clasificación