{"id":11103,"date":"2020-10-27T23:27:31","date_gmt":"2020-10-28T02:27:31","guid":{"rendered":"https:\/\/geekblogti.wpengine.com\/?p=11103"},"modified":"2024-09-24T14:26:56","modified_gmt":"2024-09-24T17:26:56","slug":"design-patterns","status":"publish","type":"post","link":"https:\/\/www.geekhunter.com/pt/blog\/design-patterns\/","title":{"rendered":"Design Patterns: seu c\u00f3digo com mais qualidade e eleg\u00e2ncia"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">Se voc\u00ea trabalha com desenvolvimento de software e, assim como eu, REALMENTE ama o que faz, voc\u00ea deve conhecer ou pelo menos ter ouvido falar sobre <strong>Design Patterns<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O assunto inclusive faz parte do programa do <strong>curso de programa\u00e7\u00e3o da Digital House<\/strong>, que no caso, eu, <a href=\"https:\/\/www.linkedin.com\/in\/franklin-barreto\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Franklin Barreto<\/strong><\/a>, ministro aulas.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Talvez voc\u00ea j\u00e1 tenha at\u00e9 implementado algum deles sem saber e, se for esse o caso, provavelmente ir\u00e1 se sentir um &#8220;super dev&#8221; assim como j\u00e1 aconteceu comigo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Imagine o sentimento de descobrir que aquela solu\u00e7\u00e3o que voc\u00ea chegou havia sido catalogada h\u00e1 muito tempo com um padr\u00e3o de design por experts no desenvolvimento de software orientado a objetos.<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>Descubra os <strong><a href=\"https:\/\/www.geekhunter.com\/pt\/blog\/quais-sao-os-paradigmas-de-programacao\/\" target=\"_blank\" rel=\"noreferrer noopener\">paradigmas de programa\u00e7\u00e3o<\/a><\/strong> mais importantes<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-o-que-s-o-design-patterns\"><strong>O que s\u00e3o Design Patterns?<\/strong><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Design patterns ou padr\u00f5es de design s\u00e3o solu\u00e7\u00f5es j\u00e1 testadas para problemas recorrentes no desenvolvimento de software, que deixam seu c\u00f3digo mais manuten\u00edvel e elegante, pois essas solu\u00e7\u00f5es se baseiam em um baixo acoplamento.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Acredito que o livro mais famoso referente a esse assunto seja o \u201c<strong><a href=\"https:\/\/amzn.to\/37LpCew\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Design Patterns: Elements of Reusable Object-Oriented Software<\/a><\/strong>\u201d nomeado no Brasil \u201c<strong><a href=\"https:\/\/amzn.to\/35LyQVI\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Padr\u00f5es de Projeto \u2014 Solu\u00e7\u00f5es Reutiliz\u00e1veis de Software Orientado a Objetos<\/a><\/strong>\u201d.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nesse livro, os autores Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides catalogaram 23 design patterns divididos em tr\u00eas categorias: <strong>criacionais<\/strong>, <strong>estruturais<\/strong> e <strong>comportamentais<\/strong>.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-para-que-serve-design-patterns\"><strong>Para que serve Design Patterns<\/strong>?<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como dito anteriormente, o uso de Design Patterns deixar\u00e1 seu c\u00f3digo mais f\u00e1cil de ser mantido e testado, al\u00e9m da seguran\u00e7a de serem solu\u00e7\u00f5es j\u00e1 testadas repetidamente e que foram adotadas por terem dado certo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E mais, as discuss\u00f5es t\u00e9cnicas ser\u00e3o mais f\u00e1ceis tendo em vista que todos estar\u00e3o falando uma mesma l\u00edngua, sem esquecer, \u00e9 claro, de um c\u00f3digo mais elegante.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-quando-usar-design-patterns\"><strong>Quando usar Design Patterns?<\/strong><\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Essa \u00e9 a pergunta de um milh\u00e3o de d\u00f3lares para quem est\u00e1 aprendendo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Quando a gente v\u00ea tudo o que pode ser alcan\u00e7ado com a utiliza\u00e7\u00e3o dessas t\u00e9cnicas, sentimos o desejo de sair usando a torto e a direito, mas podemos acabar deixando complexo algo que seria simples.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A partir do momento em que realmente entendemos como eles funcionam, temos um melhor discernimento para saber a hora de aplic\u00e1-los.<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p><a href=\"https:\/\/www.geekhunter.com\/pt\/blog\/clean-code\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Clean<\/strong> <strong>code<\/strong><\/a>: o que \u00e9 e boas pr\u00e1ticas de desenvolvimento<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-design-patterns-de-cria-o\">Design Patterns de<strong> cria\u00e7\u00e3o<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como o pr\u00f3prio nome sugere, esses padr\u00f5es nos ajudam na cria\u00e7\u00e3o de objetos, eles abstraem a cria\u00e7\u00e3o de um objeto ajudando a tornar o sistema independente de como os objetos s\u00e3o criados:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Factory Method<\/strong><\/li>\r\n<li><strong>Abstract Factory<\/strong><\/li>\r\n<li><strong>Builder<\/strong><\/li>\r\n<li><strong>Prototype<\/strong><\/li>\r\n<li><strong>Singleton<\/strong><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vamos ver um exemplo criando uma Factory Method de conex\u00f5es com o banco de dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Primeiro criamos uma interface Conexao com um m\u00e9todo que nos retorna uma connection:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>public interface Conexao {\r\n\tConnection getConnection() throws SQLException;\r\n}\r\nAgora criamos uma implementa\u00e7\u00e3o concreta que se conecta com um banco Mysql e implementa nossa interface Conexao:\r\npublic class MysqlConexao implements Conexao {\r\n\t@Override\r\n\tpublic Connection getConnection() throws SQLException {\r\n    \tMysqlDataSource source = new MysqlDataSource();\r\n        source.setUrl(\"jdbc:mysql:\/\/localhost\/loja\");\r\n    \tsource.setUser(\"root\");\r\n    \tsource.setPassword(\"\");\r\n    \treturn source.getConnection();\r\n\t}\r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vamos criar agora a classe OracleConexao:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>public class OracleConexao implements Conexao {\r\n\t@Override\r\n\tpublic Connection getConnection() throws SQLException {\r\n    \tOracleDataSource source = new OracleDataSource();\r\n        source.setDatabaseName(\"Banco\");\r\n    \tsource.setURL(\"jdbc:oracle:thin:@localhost:1521\");\r\n    \tsource.setUser(\"root\");\r\n    \tsource.setPassword(\"1234\");\r\n    \treturn source.getConnection();\r\n\t}\r\n}\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E por fim criamos nossa f\u00e1brica de conex\u00f5es:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>public abstract class ConexaoFactory {\r\n\t\r\n\tprivate ConexaoFactory() {}\r\n \r\n\tpublic static Conexao getConexao(String tipo) {\r\n    \tswitch (tipo) {\r\n    \tcase \"MYSQL\":\r\n        \treturn new MysqlConexao();\r\n    \tcase \"ORACLE\":\r\n        \treturn new OracleConexao();\r\n    \tdefault:\r\n        \tthrow new RuntimeException(\"Banco n\u00e3o existe\");\r\n    \t}\r\n\t}\r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E aqui um exemplo de uso:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>public class TestaConexao {\r\n \r\n\tpublic static void main(String[] args) throws SQLException {\r\n    \tConexao conexao = ConexaoFactory.getConexao(\"MYSQL\");\r\n        conexao.getConnection().prepareStatement(\"Select tabela que voc\u00ea quer buscar\");\r\n\t}\r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00a0As implementa\u00e7\u00f5es ficaram encapsuladas em suas respectivas classes concretas e o trabalho de cria\u00e7\u00e3o ficou na factory, assim, se houver a necessidade de conex\u00e3o com um outro banco, como postgres, por exemplo, \u00e9 s\u00f3 criar a implementa\u00e7\u00e3o e adicionar a chamada em nossa ConexaoFactory.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-design-patterns-de-estrutura\"><strong>Design Patterns de estrutura<\/strong><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O trabalho deles \u00e9 lidar com a composi\u00e7\u00e3o de classes ou objetos, facilitando o design do sistema, identificando maneiras de realizar o relacionamento entre as entidades.<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Adapter<\/strong><\/li>\r\n<li><strong>Bridge<\/strong><\/li>\r\n<li><strong>Composite<\/strong><\/li>\r\n<li><strong>Decorator<\/strong><\/li>\r\n<li><strong>Facade<\/strong><\/li>\r\n<li><strong>Flyweight<\/strong><\/li>\r\n<li><strong>Proxy<\/strong><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Imagine que voc\u00ea aprendeu com sua av\u00f3 uma receita especial de vitamina de abacate e resolveu come\u00e7ar a vender.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como era um sistema simples s\u00f3 com um produto e voc\u00ea tinha um pouco de conhecimento em programa\u00e7\u00e3o, voc\u00ea decidiu fazer por conta pr\u00f3pria.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">As classes foram modeladas e, como \u00fanico produto, voc\u00ea criou a classe abacate. Apesar dos neg\u00f3cios estarem indo bem, os clientes come\u00e7aram a pedir outros sabores como mam\u00e3o e banana por exemplo.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Voc\u00ea criou as outras classes sem nenhuma complica\u00e7\u00e3o, mas depois come\u00e7aram a pedir por mix de sabores.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Criar AbacateComMamao ou BananaComMamao iria ser um problema, pois poderiam surgir v\u00e1rias outras combina\u00e7\u00f5es e ficaria algo gigante, feio e complexo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A\u00ed que o decorator entra para nos ajudar e veremos como com o c\u00f3digo a seguir.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Primeiro criamos uma classe abstrata chamada Vitamina:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>public abstract class Vitamina {\r\n\tprivate Vitamina vitamina;\r\n \tpublic Vitamina(Vitamina vitamina) {\r\n    \tthis.vitamina = vitamina;\r\n\t}\r\n\tpublic Vitamina() {}\r\n\tprotected abstract String getSaborEspecifico();\r\n\tpublic String getSabor() {\r\n    \treturn vitamina != null ? vitamina.getSabor().concat(\" \" + getSaborEspecifico()) : getSaborEspecifico();\r\n   }\r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Criamos um construtor que recebe como argumento a pr\u00f3pria classe para o caso de ser um mix de sabores e um construtor sem argumento para sabor \u00fanico ou n\u00e3o ficarmos sem um fim.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No m\u00e9todo getSabor verificamos se vitamina \u00e9 nula, e caso seja verdadeira, pegamos o sabor espec\u00edfico. Caso contr\u00e1rio, concatenamos, tendo assim os outros sabores.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Agora, criamos as classes espec\u00edficas que estendem de Vitamina e implementam o sabor espec\u00edfico que foi definido como abstrato:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>public class Abacate extends Vitamina {\r\n public Abacate(Vitamina vitaminaInterface) {\r\n    \tsuper(vitaminaInterface);\r\n\t}\r\n\tpublic Abacate() {\r\n\t}\r\n   @Override\r\n\tpublic String getSaborEspecifico() {\r\n    \treturn \"abacate\";\r\n\t}\r\n}\r\n \r\npublic class Mamao extends Vitamina {\r\n public Mamao(Vitamina vitaminaInterface) {\r\n    \tsuper(vitaminaInterface);\r\n\t}\r\n\tpublic Mamao() {\r\n\t}\r\n\t@Override\r\n\tpublic String getSaborEspecifico() {\r\n    \treturn \"mamao\";\r\n\t}\r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Aqui nossa classe de teste.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>public class TestaVitamina {\r\n   public static void main(String[] args) {\r\n    \tVitamina vitamina = new Abacate();\r\n        System.out.println(vitamina.getSabor());\r\n    \tvitamina = new Mamao(vitamina);\r\n        System.out.println(vitamina.getSabor());\r\n    \tvitamina = new Banana(vitamina);\r\n        System.out.println(vitamina.getSabor());\r\n\t}\r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ao rodar o c\u00f3digo teremos:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Abacate<\/li>\r\n<li>Abacate Mam\u00e3o<\/li>\r\n<li>Abacate Mam\u00e3o Banana<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-design-patterns-de-comportamento\"><strong>Design Patterns de comportamento<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os padr\u00f5es de comportamento definem a maneira como classes ou objetos interagem e distribuem responsabilidades:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Interpreter<\/li>\r\n<li>Template Method<\/li>\r\n<li>Chain of Responsibility<\/li>\r\n<li>Command<\/li>\r\n<li>Iterator<\/li>\r\n<li>Mediator<\/li>\r\n<li>Memento<\/li>\r\n<li>Observer<\/li>\r\n<li>State<\/li>\r\n<li>Strategy<\/li>\r\n<li>Visitor<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Trabalhei em uma empresa que lidava com banco e n\u00f3s precis\u00e1vamos gerar comprovantes de diversos tipos como folha, tributos e transfer\u00eancias. Quando coloquei a m\u00e3o na massa, me deparei com um c\u00f3digo parecido com isso:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>package strategy;\r\n public class GeradorComprovante {\r\n \tpublic void geraComprovante(String tipo) {\r\n    \tif (tipo == \"folha\") {\r\n            System.out.println(\"Comprovante de pagamento de folha\");\r\n    \t} else if (tipo == \"tributos\") {\r\n        \tSystem.out.println(\"Comprovamente de pagamento de tributos\");\r\n    \t} else if (tipo == \"transferencia\") {\r\n            System.out.println(\"Comprovante de transfer\u00eancia\");\r\n    \t}\r\n\t}\r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esse \u00e9 um c\u00f3digo que tem uma chance enorme de n\u00e3o parar de crescer e a l\u00f3gica dentro dele tamb\u00e9m pode ser bem complexa como era o caso. Como eu resolvi esse problema? Strategy.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Foi criada a interface ComprovanteInterface.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>package strategy;\r\npublic interface ComprovanteInterface {\r\n\tpublic String getComprovante();\r\n}\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E em seguida as respectivas classes Transferencia e FolhaPagamento que implementavam a ComprovanteInterface.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>package strategy;\r\npublic class Transferencia implements ComprovanteInterface {\r\n\t@Override\r\n\tpublic String getComprovante() {\r\n    \treturn \"Comprovante de transfer\u00eancia\";\r\n\t}\r\n}\r\n \r\n \r\n \r\npackage strategy;\r\npublic class FolhaPagamento implements ComprovanteInterface {\r\n\t@Override\r\n\tpublic String getComprovante() {\r\n    \treturn \"Comprovante de pagamento de folha\";\r\n\t}\r\n}\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E agora nem precisamos mais da classe GeradorComprovante, visto que cada classe sabe como gerar seu pr\u00f3prio comprovante.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>package strategy;\r\npublic class TesteComprovante {\r\n\tpublic static void main(String[] args) {\r\n    \tComprovanteInterface transferencia = new Transferencia();\r\n    \tComprovanteInterface folha = new FolhaPagamento();\r\n        System.out.println(folha.getComprovante());\r\n    \tSystem.out.println(transferencia.getComprovante());\r\n\t}\r\n}\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Acho que isso foi o suficiente para dar uma ideia de que se quer ser um desenvolvedor de alto n\u00edvel, ter em sua \u201ccaixa de ferramentas\u201d o conhecimento sobre Design Patterns \u00e9 fundamental.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso aumentar\u00e1 a qualidade do seu c\u00f3digo e tamb\u00e9m te ajudar\u00e1 a pensar em novas formas de resolver problemas antigo <strong>melhorando suas habilidades como desenvolvedor<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 isso a\u00ed pessoal, bons estudos e at\u00e9 mais!<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bit.ly\/2TtsR1J\" target=\"_blank\" rel=\"noopener noreferrer\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"209\" class=\"wp-image-8134\" src=\"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-48-1024x209.jpg\" alt=\"\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-48-1024x209.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-48-150x31.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-48-100x20.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-48-600x122.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-48-450x92.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-48-960x196.jpg 960w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-48-300x61.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-48-768x156.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\r\n\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Se voc\u00ea trabalha com desenvolvimento de software e, assim como eu, REALMENTE ama o que faz, voc\u00ea deve conhecer ou pelo menos ter ouvido falar sobre Design Patterns. O assunto inclusive faz parte do programa do curso de programa\u00e7\u00e3o da Digital House, que no caso, eu, Franklin Barreto, ministro aulas. Talvez voc\u00ea j\u00e1 tenha at\u00e9 [&hellip;]<\/p>\n","protected":false},"author":167,"featured_media":11115,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-11103","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimiento-de-software"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.5 (Yoast SEO v28.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Design Patterns: o que s\u00e3o e como usar para melhorar seus c\u00f3digos<\/title>\n<meta name=\"description\" content=\"Aprenda com exemplos pr\u00e1ticos do Prof. Franklin Barreto sobre como usar Design Patterns para codar com mais qualidade e eleg\u00e2ncia. Confira!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Design Patterns: seu c\u00f3digo com mais qualidade e eleg\u00e2ncia\" \/>\n<meta property=\"og:description\" content=\"Se voc\u00ea trabalha com desenvolvimento de software e, assim como eu, REALMENTE ama o que faz, voc\u00ea deve conhecer ou pelo menos ter ouvido falar sobre Design\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Geekhunter\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/geekhunterbr\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-28T02:27:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-24T17:26:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/10\/design-patterns-2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"853\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Geekhunter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:site\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Geekhunter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/\"},\"author\":{\"name\":\"Geekhunter\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\"},\"headline\":\"Design Patterns: seu c\u00f3digo com mais qualidade e eleg\u00e2ncia\",\"datePublished\":\"2020-10-28T02:27:31+00:00\",\"dateModified\":\"2024-09-24T17:26:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/\"},\"wordCount\":1052,\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/design-patterns-2.jpg\",\"articleSection\":[\"Desenvolvimiento de software\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/\",\"name\":\"Design Patterns: o que s\u00e3o e como usar para melhorar seus c\u00f3digos\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/design-patterns-2.jpg\",\"datePublished\":\"2020-10-28T02:27:31+00:00\",\"dateModified\":\"2024-09-24T17:26:56+00:00\",\"description\":\"Aprenda com exemplos pr\u00e1ticos do Prof. Franklin Barreto sobre como usar Design Patterns para codar com mais qualidade e eleg\u00e2ncia. Confira!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/design-patterns\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/design-patterns-2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/design-patterns-2.jpg\",\"width\":1280,\"height\":853,\"caption\":\"design patterns\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/design-patterns\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mundo TI\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desenvolvimiento de software\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/desenvolvimiento-de-software\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Design Patterns: seu c\u00f3digo com mais qualidade e eleg\u00e2ncia\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"name\":\"Blog de TI\",\"description\":\"Dicas para o RH e profissionais da \u00e1rea TI\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\",\"name\":\"GeekHunter\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"width\":300,\"height\":300,\"caption\":\"GeekHunter\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/x.com\\\/geekhunterbr\",\"https:\\\/\\\/www.instagram.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/geekhunter-brasil\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@GeekHunterOfficial\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\",\"name\":\"Geekhunter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"caption\":\"Geekhunter\"},\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/author\\\/matias\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Design Patterns: o que s\u00e3o e como usar para melhorar seus c\u00f3digos","description":"Aprenda com exemplos pr\u00e1ticos do Prof. Franklin Barreto sobre como usar Design Patterns para codar com mais qualidade e eleg\u00e2ncia. Confira!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/","og_locale":"pt_BR","og_type":"article","og_title":"Design Patterns: seu c\u00f3digo com mais qualidade e eleg\u00e2ncia","og_description":"Se voc\u00ea trabalha com desenvolvimento de software e, assim como eu, REALMENTE ama o que faz, voc\u00ea deve conhecer ou pelo menos ter ouvido falar sobre Design","og_url":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/","og_site_name":"Blog Geekhunter","article_publisher":"https:\/\/www.facebook.com\/geekhunterbr\/","article_published_time":"2020-10-28T02:27:31+00:00","article_modified_time":"2024-09-24T17:26:56+00:00","og_image":[{"width":1280,"height":853,"url":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/10\/design-patterns-2.jpg","type":"image\/jpeg"}],"author":"Geekhunter","twitter_card":"summary_large_image","twitter_creator":"@geekhunterbr","twitter_site":"@geekhunterbr","twitter_misc":{"Escrito por":"Geekhunter","Est. tempo de leitura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/#article","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/"},"author":{"name":"Geekhunter","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400"},"headline":"Design Patterns: seu c\u00f3digo com mais qualidade e eleg\u00e2ncia","datePublished":"2020-10-28T02:27:31+00:00","dateModified":"2024-09-24T17:26:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/"},"wordCount":1052,"publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/10\/design-patterns-2.jpg","articleSection":["Desenvolvimiento de software"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/","name":"Design Patterns: o que s\u00e3o e como usar para melhorar seus c\u00f3digos","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/#primaryimage"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/10\/design-patterns-2.jpg","datePublished":"2020-10-28T02:27:31+00:00","dateModified":"2024-09-24T17:26:56+00:00","description":"Aprenda com exemplos pr\u00e1ticos do Prof. Franklin Barreto sobre como usar Design Patterns para codar com mais qualidade e eleg\u00e2ncia. Confira!","breadcrumb":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.geekhunter.com/pt/blog\/design-patterns\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/#primaryimage","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2020\/10\/design-patterns-2.jpg","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/10\/design-patterns-2.jpg","width":1280,"height":853,"caption":"design patterns"},{"@type":"BreadcrumbList","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/design-patterns\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.geekhunter.com/pt/blog\/"},{"@type":"ListItem","position":2,"name":"Mundo TI","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/"},{"@type":"ListItem","position":3,"name":"Desenvolvimiento de software","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/desenvolvimiento-de-software\/"},{"@type":"ListItem","position":4,"name":"Design Patterns: seu c\u00f3digo com mais qualidade e eleg\u00e2ncia"}]},{"@type":"WebSite","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","name":"Blog de TI","description":"Dicas para o RH e profissionais da \u00e1rea TI","publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.geekhunter.com/pt/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization","name":"GeekHunter","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","width":300,"height":300,"caption":"GeekHunter"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/geekhunterbr\/","https:\/\/x.com\/geekhunterbr","https:\/\/www.instagram.com\/geekhunterbr\/","https:\/\/www.linkedin.com\/company\/geekhunter-brasil\/","https:\/\/www.youtube.com\/@GeekHunterOfficial"]},{"@type":"Person","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400","name":"Geekhunter","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","caption":"Geekhunter"},"url":"https:\/\/www.geekhunter.com\/pt\/blog\/author\/matias\/"}]}},"_links":{"self":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/11103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/comments?post=11103"}],"version-history":[{"count":0,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/11103\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media\/11115"}],"wp:attachment":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media?parent=11103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/categories?post=11103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/tags?post=11103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}