{"id":4615,"date":"2023-05-15T11:05:22","date_gmt":"2023-05-15T14:05:22","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?p=4615"},"modified":"2023-10-21T21:38:43","modified_gmt":"2023-10-22T00:38:43","slug":"abstract-factory-o-que-e-para-que-serve","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/abstract-factory-o-que-e-para-que-serve\/","title":{"rendered":"Abstract Factory: O que \u00e9? Para que serve?"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Por que os padr\u00f5es de projeto s\u00e3o importantes?<\/h3>\n\n\n\n<p>Pense nos padr\u00f5es de projeto como um plano, uma solu\u00e7\u00e3o pronta para os problemas comuns na programa\u00e7\u00e3o. Afinal, por que reinventar a roda, n\u00e3o \u00e9 mesmo? Com os padr\u00f5es de projeto, voc\u00ea pode evitar a dor de cabe\u00e7a de ter que resolver problemas que j\u00e1 foram resolvidos antes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entendendo o padr\u00e3o de projeto Abstract Factory<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">O que \u00e9 o Abstract Factory?<\/h3>\n\n\n\n<p>O <em>Abstract Factory <\/em>\u00e9 um padr\u00e3o de projeto que permite a cria\u00e7\u00e3o de fam\u00edlias de objetos relacionados ou dependentes sem especificar suas classes concretas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como funciona o Abstract Factory?<\/h3>\n\n\n\n<p>Imagine uma f\u00e1brica de m\u00f3veis, onde cada m\u00f3vel \u00e9 uma fam\u00edlia de produtos. Voc\u00ea tem cadeiras, mesas, sof\u00e1s, todos pertencendo a diferentes estilos &#8211; moderno, cl\u00e1ssico, vintage. O <em>Abstract Factory <\/em>permite que voc\u00ea crie uma f\u00e1brica para cada estilo, garantindo que todos os m\u00f3veis produzidos sejam consistentes com o estilo da f\u00e1brica.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo pr\u00e1tico do Abstract Factory<\/h3>\n\n\n\n<p>Para entender melhor, vamos a um exemplo pr\u00e1tico. Suponha que estamos desenvolvendo um sistema para uma empresa de jogos de tabuleiro.<\/p>\n\n\n\n<p>Cada jogo de tabuleiro \u00e9 composto por v\u00e1rias pe\u00e7as, e cada pe\u00e7a tem uma forma espec\u00edfica. Com o padr\u00e3o <em>Abstract Factory<\/em>, podemos criar uma f\u00e1brica para cada jogo, que produzir\u00e1 as pe\u00e7as corretas para aquele jogo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em C#<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">C#<\/span><span role=\"button\" tabindex=\"0\" data-code=\"using System;\n\n\/\/ Criando uma interface para a f\u00e1brica abstrata\npublic interface IPecasFactory {\n    IPecaCriador CriarCriadorDePecas();\n}\n\n\/\/ Criando uma interface para o criador de pe\u00e7as\npublic interface IPecaCriador {\n    IPeca CriarPeca();\n}\n\n\/\/ Criando uma interface para as pe\u00e7as\npublic interface IPeca {\n    void DizerTipo();\n}\n\n\/\/ Criando uma classe concreta de pe\u00e7a\npublic class PecaXadrez : IPeca {\n    public void DizerTipo() {\n        Console.WriteLine(&quot;Sou uma pe\u00e7a de xadrez!&quot;);\n    }\n}\n\n\/\/ Criando uma classe concreta de criador de pe\u00e7as\npublic class CriadorDePecasXadrez : IPecaCriador {\n    public IPeca CriarPeca() {\n        return new PecaXadrez();\n    }\n}\n\n\/\/ Criando uma f\u00e1brica concreta de pe\u00e7as\npublic class FabricaDePecasXadrez : IPecasFactory {\n    public IPecaCriador CriarCriadorDePecas() {\n        return new CriadorDePecasXadrez();\n    }\n}\n\nclass Program {\n    static void Main(string[] args) {\n        \/\/ Criando uma f\u00e1brica de pe\u00e7as de xadrez\n        IPecasFactory fabrica = new FabricaDePecasXadrez();\n\n        \/\/ Criando um criador de pe\u00e7as de xadrez\n        IPecaCriador criador = fabrica.CriarCriadorDePecas();\n\n        \/\/ Criando uma pe\u00e7a de xadrez\n        IPeca peca = criador.CriarPeca();\n\n        \/\/ Imprimindo o tipo da pe\u00e7a criada\n        peca.DizerTipo();\n    }\n}\n\n\/\/ Fonte: ChatGPT \" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma interface para a f\u00e1brica abstrata<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> IPecasFactory <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    IPecaCriador <\/span><span style=\"color: #88C0D0\">CriarCriadorDePecas<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma interface para o criador de pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> IPecaCriador <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    IPeca <\/span><span style=\"color: #88C0D0\">CriarPeca<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma interface para as pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> IPeca <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">DizerTipo<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma classe concreta de pe\u00e7a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PecaXadrez<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> IPeca <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">DizerTipo<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">Console<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">WriteLine<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Sou uma pe\u00e7a de xadrez!<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma classe concreta de criador de pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">CriadorDePecasXadrez<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> IPecaCriador <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> IPeca <\/span><span style=\"color: #88C0D0\">CriarPeca<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> PecaXadrez<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma f\u00e1brica concreta de pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FabricaDePecasXadrez<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> IPecasFactory <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> IPecaCriador <\/span><span style=\"color: #88C0D0\">CriarCriadorDePecas<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> CriadorDePecasXadrez<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Program<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Main<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">[]<\/span><span style=\"color: #D8DEE9FF\"> args<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Criando uma f\u00e1brica de pe\u00e7as de xadrez<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        IPecasFactory fabrica <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> FabricaDePecasXadrez<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Criando um criador de pe\u00e7as de xadrez<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        IPecaCriador criador <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">fabrica<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">CriarCriadorDePecas<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Criando uma pe\u00e7a de xadrez<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        IPeca peca <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">criador<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">CriarPeca<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Imprimindo o tipo da pe\u00e7a criada<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">peca<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">DizerTipo<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Fonte: ChatGPT <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Nesse exemplo, temos a cria\u00e7\u00e3o de uma interface para a f\u00e1brica abstrata <code>IPecasFactory<\/code>, que \u00e9 implementada pela classe concreta <code>FabricaDePecasXadrez<\/code>. A interface <code>IPecaCriador<\/code> \u00e9 criada para o criador de pe\u00e7as, que \u00e9 implementada pela classe concreta <code>CriadorDePecasXadrez<\/code>. Tamb\u00e9m temos a interface <code>IPeca <\/code>para as pe\u00e7as, que \u00e9 implementada pela classe concreta <code>PecaXadrez<\/code>.<\/p>\n\n\n\n<p>No <code>Main()<\/code>, \u00e9 criada uma f\u00e1brica de pe\u00e7as de xadrez e um criador de pe\u00e7as de xadrez, que s\u00e3o usados para criar uma pe\u00e7a de xadrez. Por fim, o tipo da pe\u00e7a criada \u00e9 impresso na tela.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em Java<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Java<\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ Criando uma interface para a f\u00e1brica abstrata\ninterface PecasFactory {\n    PecaCriador criarCriadorDePecas();\n}\n\n\/\/ Criando uma interface para o criador de pe\u00e7as\ninterface PecaCriador {\n    Peca criarPeca();\n}\n\n\/\/ Criando uma interface para as pe\u00e7as\ninterface Peca {\n    void dizerTipo();\n}\n\n\/\/ Criando uma classe concreta de pe\u00e7a\nclass PecaXadrez implements Peca {\n    public void dizerTipo() {\n        System.out.println(&quot;Sou uma pe\u00e7a de xadrez!&quot;);\n    }\n}\n\n\/\/ Criando uma classe concreta de criador de pe\u00e7as\nclass CriadorDePecasXadrez implements PecaCriador {\n    public Peca criarPeca() {\n        return new PecaXadrez();\n    }\n}\n\n\/\/ Criando uma f\u00e1brica concreta de pe\u00e7as\nclass FabricaDePecasXadrez implements PecasFactory {\n    public PecaCriador criarCriadorDePecas() {\n        return new CriadorDePecasXadrez();\n    }\n}\n\npublic class Main {\n    public static void main(String[] args) {\n        \/\/ Criando uma f\u00e1brica de pe\u00e7as de xadrez\n        PecasFactory fabrica = new FabricaDePecasXadrez();\n\n        \/\/ Criando um criador de pe\u00e7as de xadrez\n        PecaCriador criador = fabrica.criarCriadorDePecas();\n\n        \/\/ Criando uma pe\u00e7a de xadrez\n        Peca peca = criador.criarPeca();\n\n        \/\/ Imprimindo o tipo da pe\u00e7a criada\n        peca.dizerTipo();\n    }\n}\n\n\/\/ Fonte: ChatGPT\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma interface para a f\u00e1brica abstrata<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PecasFactory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">PecaCriador<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">criarCriadorDePecas<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma interface para o criador de pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PecaCriador<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">Peca<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">criarPeca<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma interface para as pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Peca<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">dizerTipo<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma classe concreta de pe\u00e7a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PecaXadrez<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">implements<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB; font-weight: bold\">Peca<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">dizerTipo<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">out<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">println<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Sou uma pe\u00e7a de xadrez!<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma classe concreta de criador de pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">CriadorDePecasXadrez<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">implements<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB; font-weight: bold\">PecaCriador<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Peca<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">criarPeca<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">PecaXadrez<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Criando uma f\u00e1brica concreta de pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FabricaDePecasXadrez<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">implements<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB; font-weight: bold\">PecasFactory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PecaCriador<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">criarCriadorDePecas<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">CriadorDePecasXadrez<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Main<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">main<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #ECEFF4\">[]<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">args<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Criando uma f\u00e1brica de pe\u00e7as de xadrez<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">PecasFactory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">fabrica<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FabricaDePecasXadrez<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Criando um criador de pe\u00e7as de xadrez<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">PecaCriador<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">criador<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">fabrica<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">criarCriadorDePecas<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Criando uma pe\u00e7a de xadrez<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">Peca<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">peca<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">criador<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">criarPeca<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Imprimindo o tipo da pe\u00e7a criada<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">peca<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">dizerTipo<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Fonte: ChatGPT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Nesse exemplo, temos a cria\u00e7\u00e3o de uma interface para a f\u00e1brica abstrata <code>PecasFactory<\/code>, que \u00e9 implementada pela classe concreta <code>FabricaDePecasXadrez<\/code>. A interface <code>PecaCriador<\/code> \u00e9 criada para o criador de pe\u00e7as, que \u00e9 implementada pela classe concreta <code>CriadorDePecasXadrez<\/code>. Tamb\u00e9m temos a interface Peca para as pe\u00e7as, que \u00e9 implementada pela classe concreta <code>PecaXadrez.<\/code><\/p>\n\n\n\n<p>No <code>main()<\/code>, \u00e9 criada uma f\u00e1brica de pe\u00e7as de xadrez e um criador de pe\u00e7as de xadrez, que s\u00e3o usados para criar uma pe\u00e7a de xadrez. Por fim, o tipo da pe\u00e7a criada \u00e9 impresso na tela.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em Python<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Python<\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Criando uma interface para a f\u00e1brica abstrata\nclass PecasFactory:\n    def criar_criador_de_pecas(self):\n        pass\n\n# Criando uma interface para o criador de pe\u00e7as\nclass PecaCriador:\n    def criar_peca(self):\n        pass\n\n# Criando uma interface para as pe\u00e7as\nclass Peca:\n    def dizer_tipo(self):\n        pass\n\n# Criando uma classe concreta de pe\u00e7a\nclass PecaXadrez(Peca):\n    def dizer_tipo(self):\n        print(&quot;Sou uma pe\u00e7a de xadrez!&quot;)\n\n# Criando uma classe concreta de criador de pe\u00e7as\nclass CriadorDePecasXadrez(PecaCriador):\n    def criar_peca(self):\n        return PecaXadrez()\n\n# Criando uma f\u00e1brica concreta de pe\u00e7as\nclass FabricaDePecasXadrez(PecasFactory):\n    def criar_criador_de_pecas(self):\n        return CriadorDePecasXadrez()\n\n# Criando a fun\u00e7\u00e3o main\ndef main():\n    # Criando uma f\u00e1brica de pe\u00e7as de xadrez\n    fabrica = FabricaDePecasXadrez()\n\n    # Criando um criador de pe\u00e7as de xadrez\n    criador = fabrica.criar_criador_de_pecas()\n\n    # Criando uma pe\u00e7a de xadrez\n    peca = criador.criar_peca()\n\n    # Imprimindo o tipo da pe\u00e7a criada\n    peca.dizer_tipo()\n\nif __name__ == '__main__':\n    main()\n\n# Fonte: ChatGPT\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #616E88\"># Criando uma interface para a f\u00e1brica abstrata<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PecasFactory<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">criar_criador_de_pecas<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Criando uma interface para o criador de pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PecaCriador<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">criar_peca<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Criando uma interface para as pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Peca<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">dizer_tipo<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Criando uma classe concreta de pe\u00e7a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PecaXadrez<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB; font-weight: bold\">Peca<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">dizer_tipo<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Sou uma pe\u00e7a de xadrez!<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Criando uma classe concreta de criador de pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">CriadorDePecasXadrez<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB; font-weight: bold\">PecaCriador<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">criar_peca<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">PecaXadrez<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Criando uma f\u00e1brica concreta de pe\u00e7as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FabricaDePecasXadrez<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB; font-weight: bold\">PecasFactory<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">criar_criador_de_pecas<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">CriadorDePecasXadrez<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Criando a fun\u00e7\u00e3o main<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">main<\/span><span style=\"color: #ECEFF4\">():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># Criando uma f\u00e1brica de pe\u00e7as de xadrez<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    fabrica <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FabricaDePecasXadrez<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># Criando um criador de pe\u00e7as de xadrez<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    criador <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> fabrica<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">criar_criador_de_pecas<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># Criando uma pe\u00e7a de xadrez<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    peca <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> criador<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">criar_peca<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># Imprimindo o tipo da pe\u00e7a criada<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    peca<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">dizer_tipo<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> __name__ <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">__main__<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">main<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Fonte: ChatGPT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Nesse exemplo, temos a cria\u00e7\u00e3o de uma classe abstrata <code>PecasFactory<\/code> para a f\u00e1brica abstrata, que \u00e9 implementada pela classe concreta <code>FabricaDePecasXadrez<\/code>. A classe abstrata <code>PecaCriador<\/code> \u00e9 criada para o criador de pe\u00e7as, que \u00e9 implementada pela classe concreta <code>CriadorDePecasXadrez<\/code>. Tamb\u00e9m temos a classe abstrata Peca para as pe\u00e7as, que \u00e9 implementada pela classe concreta <code>PecaXadrez<\/code>.<\/p>\n\n\n\n<p>Na fun\u00e7\u00e3o <code>main()<\/code>, \u00e9 criada uma f\u00e1brica de pe\u00e7as de xadrez e um criador de pe\u00e7as de xadrez, que s\u00e3o usados para criar uma pe\u00e7a de xadrez. Por fim, o tipo da pe\u00e7a criada \u00e9 impresso na tela.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Os benef\u00edcios do Abstract Factory<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Promove a consist\u00eancia<\/h3>\n\n\n\n<p>Como mencionado anteriormente, o <em>Abstract Factory<\/em> garante a consist\u00eancia na cria\u00e7\u00e3o de objetos. Isso significa que voc\u00ea pode ter certeza de que todos os objetos criados por uma f\u00e1brica espec\u00edfica ser\u00e3o compat\u00edveis e funcionar\u00e3o bem juntos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ajuda na escalabilidade<\/h3>\n\n\n\n<p>O <em>Abstract Factory<\/em> tamb\u00e9m \u00e9 ben\u00e9fico quando se trata de escalabilidade. \u00c0 medida que seu software cresce, voc\u00ea pode adicionar novas f\u00e1bricas para criar novos tipos de objetos sem alterar o c\u00f3digo existente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Facilita a manuten\u00e7\u00e3o<\/h3>\n\n\n\n<p>Finalmente, o <em>Abstract Factory<\/em> facilita a manuten\u00e7\u00e3o do seu c\u00f3digo. Como ele promove o desacoplamento, as altera\u00e7\u00f5es em uma parte do sistema n\u00e3o afetar\u00e3o outras partes. Isso torna o c\u00f3digo mais f\u00e1cil de entender e de manter.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quando usar o Abstract Factory<\/h2>\n\n\n\n<p>O padr\u00e3o <em>Abstract Factory<\/em> \u00e9 \u00fatil quando voc\u00ea tem fam\u00edlias de produtos que precisam ser criadas juntas e usadas juntas, e quando voc\u00ea quer garantir que uma fam\u00edlia de produtos n\u00e3o seja combinada com produtos de outra fam\u00edlia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quando n\u00e3o usar o Abstract Factory<\/h2>\n\n\n\n<p>No entanto, o <em>Abstract Factory<\/em> n\u00e3o \u00e9 uma solu\u00e7\u00e3o para todos os problemas. Ele pode adicionar complexidade desnecess\u00e1ria ao seu c\u00f3digo se voc\u00ea tiver apenas algumas classes de produtos ou se n\u00e3o houver necessidade de garantir consist\u00eancia entre diferentes fam\u00edlias de produtos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Abstract Factory vs. outros padr\u00f5es de projeto<\/h2>\n\n\n\n<p>Os padr\u00f5es de projeto n\u00e3o existem em um v\u00e1cuo. Eles muitas vezes t\u00eam semelhan\u00e7as e diferen\u00e7as com outros padr\u00f5es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Abstract Factory vs. Factory Method<\/h3>\n\n\n\n<p>O <em>Abstract Factory<\/em> e o <em>Factory Method <\/em>s\u00e3o semelhantes em que ambos lidam com a cria\u00e7\u00e3o de objetos. A principal diferen\u00e7a \u00e9 que o <em>Abstract Factory <\/em>\u00e9 sobre fam\u00edlias de objetos, enquanto o <em>Factory Method<\/em> \u00e9 sobre m\u00e9todos de cria\u00e7\u00e3o de objetos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Abstract Factory vs. Builder<\/h3>\n\n\n\n<p>O <em>Abstract Factory <\/em>\u00e9 semelhante ao<em> Builder<\/em> na medida em que ambos lidam com a cria\u00e7\u00e3o de objetos complexos. No entanto, enquanto o <em>Builder<\/em> se concentra na constru\u00e7\u00e3o de um objeto passo a passo, o <em>Abstract Factory<\/em> se concentra na cria\u00e7\u00e3o de fam\u00edlias de objetos relacionados.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>O<em> Abstract Factory<\/em> \u00e9 um padr\u00e3o de projeto poderoso que oferece muitos benef\u00edcios, desde a promo\u00e7\u00e3o da consist\u00eancia at\u00e9 a facilita\u00e7\u00e3o da escalabilidade e da manuten\u00e7\u00e3o. No entanto, como todos os padr\u00f5es de projeto, deve ser usado com sabedoria e apenas quando apropriado.<\/p>\n\n\n\n<p>Esse conte\u00fado \u00e9 parte do material disponibilizado para os participantes do meu grupo de estudos de&nbsp;<strong>Padr\u00f5es de Projeto<\/strong>. Voc\u00ea quer participar desse grupo?&nbsp;<strong><a href=\"https:\/\/elemarjr.com\/clube-de-estudos\/gof-design-patterns\/\">Clique aqui e veja como funciona<\/a><\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00favidas Frequentes<\/h2>\n\n\n\n<p><strong>O que \u00e9 o padr\u00e3o de projeto <em>Abstract Factory<\/em>?<\/strong><br>O <em>Abstract Factory<\/em> \u00e9 um padr\u00e3o de projeto que permite a cria\u00e7\u00e3o de fam\u00edlias de objetos relacionados ou dependentes sem especificar suas classes concretas.<\/p>\n\n\n\n<p><strong>Quando devo usar o <em>Abstract Factory<\/em>?<\/strong><br>O <em>Abstract Factory<\/em> \u00e9 \u00fatil quando voc\u00ea tem fam\u00edlias de produtos que precisam ser criadas juntas e usadas juntas, e quando voc\u00ea quer garantir que uma fam\u00edlia de produtos n\u00e3o seja combinada com produtos de outra fam\u00edlia.<\/p>\n\n\n\n<p><strong>Quando n\u00e3o devo usar o <em>Abstract Factory<\/em>?<\/strong><br>O <em>Abstract Factory<\/em> pode adicionar complexidade desnecess\u00e1ria ao seu c\u00f3digo se voc\u00ea tiver apenas algumas classes de produtos ou se n\u00e3o houver necessidade de garantir consist\u00eancia entre diferentes fam\u00edlias de produtos.<\/p>\n\n\n\n<p><strong>Qual \u00e9 a diferen\u00e7a entre <em>Abstract Factory <\/em>e <em>Factory Method<\/em>?<\/strong><br>O <em>Abstract Factory <\/em>e o <em>Factory Method <\/em>s\u00e3o semelhantes em que ambos lidam com a cria\u00e7\u00e3o de objetos. A principal diferen\u00e7a \u00e9 que o <em>Abstract Factory <\/em>\u00e9 sobre fam\u00edlias de objetos, enquanto o <em>Factory Method <\/em>\u00e9 sobre m\u00e9todos de cria\u00e7\u00e3o de objetos.<\/p>\n\n\n\n<p><strong>Qual \u00e9 a diferen\u00e7a entre <em>Abstract Factory <\/em>e <em>Builder<\/em>?<\/strong><br>O <em>Abstract Factory<\/em> \u00e9 semelhante ao <em>Builder<\/em> na medida em que ambos lidam com a cria\u00e7\u00e3o de objetos complexos. No entanto, enquanto o <em>Builder <\/em>se concentra na constru\u00e7\u00e3o de um objeto passo a passo, o <em>Abstract Factory<\/em> se concentra na cria\u00e7\u00e3o de fam\u00edlias de objetos relacionados.<\/p>\n","protected":false},"featured_media":4622,"parent":0,"template":"","cursos":[7],"class_list":["post-4615","artigos","type-artigos","status-publish","has-post-thumbnail","hentry","cursos-gof"],"acf":[],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos\/4615","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos"}],"about":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/types\/artigos"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media\/4622"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=4615"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=4615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}