[SEM AUDIO DE VOZ] Olá bem-vindo ao curso de Desenvolvimento Ágil com Padrões de Projeto. Eu sou Clóvis Fernandes e na aula de hoje daremos prosseguimento ao que nós apresentamos na parte 1. E é o uso de métodos estáticos para resolver os dois primeiros problemas que a gente tem com construtores. Primeiro, a falta de poder expressar a intenção do programador, usando o construtor e a impossibilidade de ter mais do que construtor, dado que eles têm uma mesma assinatura. Na aula de hoje nós vamos então mostrar como proceder para que aquelas duas intenções novas que a gente tinha exemplificado anteriormente e mostrando que aqueles problemas todos são resolvidos através de métodos de fábrica, métodos estáticos de fábrica. Vamos começar então pela segundo intenção, quero gerar inteiro aleatório que seja maior que valor mínimo. Nós estamos vendo aqui o construtor que eu usei anteriormente, eu tenho até os comentários que mostram a intencionalidade, a minha intenção que eu estava querendo. Como é que eu vou transformar isso usando métodos estáticos de fábrica. Vou criar novo, porque, para cada intenção que eu tiver, crio novo método estático de fábrica. Então eu vou criar novo, lembrando que eu já coloquei aquele construtor inicial como privado, então não estou reapresentado ele aqui, só estou mostrando então agora que estou fazendo método estático de fábrica, que eu estou chamando aqui de "maiorQue" o valor mínimo. Vamos representar separadamente, vocês vejam que eu coloquei o "min" e vou passar esse parâmetro para o construtor privado. E como valor máximo eu vou colocar "Integer.MAX_VALUE". Com isso, o método estático de fábrica "maiorQue" vai me criar objeto GeradorIntAleatório para esse valor mínimo que eu quero colocar e o máximo o valor maior inteiro que eu quero representar. Vamos mostrar agora aquele exemplo que eu, usando o construtor antigo, eu queria criar gerador que fosse para gerar números que fossem maiores que o valor mínimo que eu coloco, que eu exemplifiquei até como valor 15, seja maior que 15. Então logo baixo vocês estão vendo que é método estático, eu coloco o nome da classe, e é GeradorIntAleatório e maiorQue 15. Passo esse valor, esse valor vai gerar o construtor que eu quero, pela intenção. Eu quero gerar números aleatórios que sejam maiores que 15, então a minha intenção ficou claramente expressa. Ficou muito claro aqui, o que eu estava querendo criar, era gerador de números aleatórios inteiros maiores que o número 15. Vamos mostrar agora aquela terceira intenção, lembra que, quando eu tentei usar construtor para criar essa terceira intenção não conseguia fazer porque as assinaturas dos dois construtores era a mesma, então eu não podia fazer. Agora usando o método estático de fábrica, isso vai resolver naturalmente, ou seja, além de eu colocar a intenção explícita eu posso criar aqui que não vai haver nenhum conflito nenhum, por causa da assinatura do método estático é diferente do outro, como nós iremos notar aqui. Novamente, apresento aquele construtor antigo, que eu não consegui construir, vamos deixar isso bem claro, mas cujo comentário está mostrando a intenção que eu estava querendo, que é gerar número inteiro, aleatório, menor que o valor máximo, então o que eu faço? Vou construir método estático de fábrica, novamente lembro que não estou apresentando o construtor privado que eu já defini, e que faço uso dentro do meu método de fábrica, agora eu estou pondo o método de fábrica menor que valor máximo que eu especificar, a intencionalidade foi colocada aí. Então vamos, olhando ele detalhadamente, que agora o nome dele demonstra toda a intenção que eu estou querendo fazer. E aí eu simplesmente faço uso do meu construtor privado, passando o valor mínimo, que eu defini com aquela constante, valor mínimo, e o valor máximo é o máximo que eu estou passando para aquele construtor, então o resultado desse método estático de fábrica é criar gerador que vai gerar números inteiros menores que o valor máximo que eu colocar ali. Agora vamos exemplificar comparando com o outro exemplo que eu dei, já usando o método de fábrica. Já usando o método de fábrica para vocês verem que a intencionalidade vai ficar clara quando eu comparar método de fábrica com outro, o uso deles. Mas vocês vejam que eu tenho cima o maiorQue(15) e baixo eu estou fazendo o gerador para menorQue(15), então ficou claro a intencionalidade do menorQue, cima também ficou claro que era o maiorQue, eu não tenho mais duvida. Antes eu não nem conseguia criar, mas teoricamente eu ia confundir, esse construtor é para maior que quinze ou menor que quinze, agora não tenho duvida porque isso está expresso, explicitamente no nome do método estático de fábrica. Eu consigo compilar tudo, então eu estou ai mostrando para vocês, e tudo isso é compilável, ou seja tenho agora o método, o construtor da classe privada e tenho três métodos de fábrica e todos eles vão, como o nome diz, de método estático de fábrica, ele vai voltar objeto da classe gerador IntAleatório. Mas cada com a sua intencionalidade. Ao fazer isso, ao dar essa intencionalidade vocês vejam que cada tem a sua intencionalidade, eu não preciso mais usar aqueles comentários para explicitar a intencionalidade porque ela está explícita no próprio código. E ao mesmo tempo eu não tenho aquele problema de ter assinaturas idênticas dos construtores, porque agora o simples facto de tornar explícito a intencionalidade cada método estático de fábrica, me dá uma assinatura diferente. Vocês vejam que o maiorQue o int min, a assinatura é maior que int. E o do menorQue int max, a assinatura é menorQue int. Pronto, os nomes são diferentes, embora os parâmetros sejam iguais. Com isso você aprendeu nesta aula que com o uso de métodos estáticos de fábrica você resolve os problemas de explicitar a intenção do usuário, do programador, ao colocar, fazer nomes apropriados usando os métodos estáticos de fábrica e ao mesmo tempo, resolvendo aquele problema dos construtores que é impossível gerar dois construtores com a mesma assinatura. Os outros problemas dos construtores, do três até ao seis, também são solúveis através de métodos estáticos de fábrica, mas numa mistura, alguns deles, com padrões, outros padrões de projeto, como a gente espera vendo neste curso. Obrigado [MÚSICA]