{"id":766,"date":"2012-03-28T21:30:17","date_gmt":"2012-03-28T21:30:17","guid":{"rendered":"http:\/\/leonardocotta.com.br\/blog\/?p=766"},"modified":"2012-03-28T21:30:17","modified_gmt":"2012-03-28T21:30:17","slug":"singleton-padrao-de-projeto-com-microsoft-net-c-sharp","status":"publish","type":"post","link":"https:\/\/leonardocotta.com.br\/?p=766","title":{"rendered":"Singleton &#8211; Padr\u00e3o de Projeto com Microsoft .NET C Sharp"},"content":{"rendered":"<p>&nbsp;<\/p>\n<div class=\"limit\">\n<div class=\"main-content\">\n<div style=\"width:658px;word-wrap:break-word;\">\n<div class=\"article\">\n<h3>Introdu\u00e7\u00e3o<\/h3>\n<p>Padr\u00e3o de Projeto ou em ingl\u00eas Design Patterns, \u00e9 uma forma organizada de criar solu\u00e7\u00f5es reutiliz\u00e1veis para os problemas recorrentes do dia a dia de um projetista ou programador.<\/p>\n<h3>Por que usar Padr\u00e3o de Projeto?<\/h3>\n<p>\u00c9 poss\u00edvel desenvolver software sem utilizar padr\u00f5es de projetos, e o fato de usar n\u00e3o caracter\u00edstica um c\u00f3digo ou software de qualidade. Padr\u00e3o de projeto \u00e9 somente um dos v\u00e1rios detalhes que comp\u00f5em o desenvolvimento de um software. Usar padr\u00f5es de projetos \u00e9 uma escolha que cabe a cada desenvolvedor\/time. Existem casos onde as empresas desenvolvem seus pr\u00f3prios padr\u00f5es e suas framework de trabalho.<\/p>\n<p>O conceito padr\u00e3o de projeto foi criado na d\u00e9cada de 70 pelo arquiteto e matem\u00e1tico Christopher Alexander um australiano que foi um dos principais cr\u00edticos da arquitetura moderna. Alexander definiu dois pontos fundamentais para cria\u00e7\u00e3o de um padr\u00e3o, apontando as caracter\u00edsticas e formato b\u00e1sico que um &#8220;objeto&#8221; deve conter para ser classificado como padr\u00e3o:<\/p>\n<p><!--more--><\/p>\n<p>Caracter\u00edsticas<\/p>\n<ul>\n<li>Encapsulamento<\/li>\n<li>Generalidade<\/li>\n<li>Equil\u00edbrio<\/li>\n<li>Abstra\u00e7\u00e3o<\/li>\n<li>Abertura<\/li>\n<li>Combinatoriedade<\/li>\n<\/ul>\n<p>Formato<\/p>\n<ul>\n<li>Nome<\/li>\n<li>Exemplo<\/li>\n<li>Contexto<\/li>\n<li>Problema<\/li>\n<li>Solu\u00e7\u00e3o<\/li>\n<\/ul>\n<p>Embora o que Christopher Alexander estivesse propondo fosse padr\u00f5es para constru\u00e7\u00f5es civis, podemos perceber a total rela\u00e7\u00e3o com o desenvolvimento de software. Portanto, podemos compreender o que \u00e9 necess\u00e1rio para cria\u00e7\u00e3o de um padr\u00e3o.<\/p>\n<p>Com isso, vamos ent\u00e3o entender quais os benef\u00edcios e vantagens que ao desenvolver software utilizando padr\u00f5es de projetos o time de desenvolvimento pode obter.<\/p>\n<h3>Singleton &#8211; Padr\u00e3o de Projeto<\/h3>\n<p>O padr\u00e3o de projeto <a href=\"http:\/\/www.devmedia.com.br\/curso\/design-patterns-com-net\/286\" rel=\"nofollow noopener\" target=\"_blank\">singleton<\/a> tem como defini\u00e7\u00e3o garantir que uma classe tenha somente uma inst\u00e2ncia e fornecer um ponto global de acesso a mesma. Para isso, singleton implementa uma opera\u00e7\u00e3o chamada de Instance que tem como premissa permitir que seus clientes acessem sua \u00fanica inst\u00e2ncia, al\u00e9m de ser capaz de criar sua pr\u00f3pria inst\u00e2ncia \u00fanica.<\/p>\n<h3>Classifica\u00e7\u00e3o<\/h3>\n<p>Padr\u00f5es de projeto descreve 23 modelos de desenho, por\u00e9m, cabe ressaltar que existem centenas de padr\u00f5es. No famoso livro Design Patterns dos autores Gamma, Helm, Johnson e Vlissides \u00e9 apresentado 23 padr\u00f5es de projeto, documentados e j\u00e1 conhecidos no mundo do desenvolvimento de software. \u00c9 importante lembrar que isso n\u00e3o significa que esses padr\u00f5es s\u00e3o os mais \u00fateis para se implementar, sendo assim, vale a pena pesquisar padr\u00f5es em outras fontes.<\/p>\n<p>Estes 23 padr\u00f5es s\u00e3o divididos em padr\u00f5es de cria\u00e7\u00e3o, padr\u00f5es estruturais e padr\u00f5es comportamentais. Vamos explorar os 23 padr\u00f5es de projeto na serie de artigos sobre o assunto. O padr\u00e3o de projeto Singleton est\u00e1 classificado como padr\u00e3o de cria\u00e7\u00e3o.<\/p>\n<h3>Vantagens e perigos ao implementar Singleton<\/h3>\n<p><strong>Benef\u00edcios:<\/strong><\/p>\n<ul>\n<li>Acesso controlado \u00e0 inst\u00e2ncia \u00fanica<\/li>\n<li>Espa\u00e7o de nomes reduzido<\/li>\n<li>Permite um refinamento de opera\u00e7\u00f5es e da representa\u00e7\u00e3o<\/li>\n<li>Permite um n\u00famero vari\u00e1vel de inst\u00e2ncias<\/li>\n<li>Mais flex\u00edvel do que opera\u00e7\u00f5es de classes<\/li>\n<\/ul>\n<p><strong>Perigos ao implementar singleton de maneira incorreta:<\/strong><\/p>\n<ul>\n<li>Estado global<\/li>\n<li>Utiliza\u00e7\u00e3o de singleton desnecess\u00e1rios<\/li>\n<li>Anti-padr\u00f5es para muitos programadores<\/li>\n<li>Revers\u00e3o dif\u00edcil<\/li>\n<li>Mais complexidades nos testes<\/li>\n<li>Pode ser facilmente quebrado<\/li>\n<\/ul>\n<p><strong>Listagem 1: <\/strong>Exemplo c\u00f3digo &#8211; Singleton Simples<\/p>\n<p>Vamos agora criar uma classe que implementa o modelo simplificado do padr\u00e3o Singleton. Para isso, vamos desenvolver uma classe que implementa o objeto &#8220;Cadeiras&#8221; que ser\u00e3o alocadas para um determinado jantar.<\/p>\n<div>\n<div id=\"highlighter_994358\" class=\"syntaxhighlighter  js\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<div class=\"line number32 index31 alt1\">32<\/div>\n<div class=\"line number33 index32 alt2\">33<\/div>\n<div class=\"line number34 index33 alt1\">34<\/div>\n<div class=\"line number35 index34 alt2\">35<\/div>\n<div class=\"line number36 index35 alt1\">36<\/div>\n<div class=\"line number37 index36 alt2\">37<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"js plain\">namespace Singleton<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js comments\">\/\/ Classe no modelo Singleton simples<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">public sealed class Cadeira<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">private static readonly Cadeira instance = <\/code><code class=\"js keyword\">new<\/code> <code class=\"js plain\">Cadeira();<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">public int Quantidade { get; set; }<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">private Cadeira() { }<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">public static Cadeira Instance<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">get<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js keyword\">return<\/code> <code class=\"js plain\">instance;<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js comments\">\/\/ Implementa\u00e7\u00e3o a casse Singleton simples...<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">class Program<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">static void Main(string[] args)<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js comments\">\/\/ Colocando em pr\u00e1tica<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">Cadeira _cadeira1 = Cadeira.Instance;<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">_cadeira1.Quantidade = 1;<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">Cadeira _cadeira2 = Cadeira.Instance;<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">_cadeira2.Quantidade = 5;<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">Console.WriteLine(_cadeira1.Quantidade.ToString());<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">Console.WriteLine(_cadeira2.Quantidade.ToString());<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">Console.ReadLine();<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"js plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Com essa implementa\u00e7\u00e3o podemos identificar que existe uma \u00fanica inst\u00e2ncia e um \u00fanico pronto de acesso, evitando a cria\u00e7\u00e3o desnecess\u00e1ria de inst\u00e2ncias com um \u00fanico ponto de acesso.<\/p>\n<p><strong>Listagem 2: <\/strong>Exemplo de c\u00f3digo &#8211; Singleton com Generics<\/p>\n<p>Outro recurso importante suportado pelo .Net Framework s\u00e3o os tipos generics. A implementa\u00e7\u00e3o de uma classe singleton utilizando generics permite ao desenvolvedor mais flexibilidade no desenvolvimento do seu c\u00f3digo. Para isso, \u00e9 apresentado um c\u00f3digo abaixo que implementa singleton utilizando generics com o mesmo exemplo do modelo apresentado acima, por\u00e9m agora o cliente poder\u00e1 alugar &#8220;cadeiras&#8221; e &#8220;mesas&#8221; para o seu jantar.<\/p>\n<div>\n<div id=\"highlighter_803891\" class=\"syntaxhighlighter  js\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<div class=\"line number32 index31 alt1\">32<\/div>\n<div class=\"line number33 index32 alt2\">33<\/div>\n<div class=\"line number34 index33 alt1\">34<\/div>\n<div class=\"line number35 index34 alt2\">35<\/div>\n<div class=\"line number36 index35 alt1\">36<\/div>\n<div class=\"line number37 index36 alt2\">37<\/div>\n<div class=\"line number38 index37 alt1\">38<\/div>\n<div class=\"line number39 index38 alt2\">39<\/div>\n<div class=\"line number40 index39 alt1\">40<\/div>\n<div class=\"line number41 index40 alt2\">41<\/div>\n<div class=\"line number42 index41 alt1\">42<\/div>\n<div class=\"line number43 index42 alt2\">43<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"js plain\">namespace Singleton<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">public sealed class Singleton&lt;T&gt; where T : class, <\/code><code class=\"js keyword\">new<\/code><code class=\"js plain\">()<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">private static T instance;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">public static T Instance()<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">lock (<\/code><code class=\"js keyword\">typeof<\/code><code class=\"js plain\">(T))<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js keyword\">if<\/code> <code class=\"js plain\">(instance == <\/code><code class=\"js keyword\">null<\/code><code class=\"js plain\">) instance = <\/code><code class=\"js keyword\">new<\/code> <code class=\"js plain\">T();<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js keyword\">return<\/code> <code class=\"js plain\">instance;<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">public class Cadeira<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">public int Quantidade { get; set; }<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">public class Mesa<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">public string Tamanho { get; set; }<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js comments\">\/\/ Implementa\u00e7\u00e3o a casse Singleton sincronizada...<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">class Program<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">static void Main(string[] args)<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js comments\">\/\/ Colocando em pr\u00e1tica<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">Cadeira _cadeira = Singleton&lt;Cadeira&gt;.Instance();<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">_cadeira.Quantidade = 5;<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">Mesa _mesa = Singleton&lt;Mesa&gt;.Instance();<\/code><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">_mesa.Tamanho = <\/code><code class=\"js string\">\"10metros\"<\/code><code class=\"js plain\">;<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><\/div>\n<div class=\"line number38 index37 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">Console.WriteLine(_cadeira.Quantidade.ToString());<\/code><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">Console.WriteLine(_mesa.Tamanho);<\/code><\/div>\n<div class=\"line number40 index39 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">Console.ReadLine();<\/code><\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number42 index41 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"js plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Listagem 3: <\/strong>Exemplo de c\u00f3digo &#8211; Singleton Sincronizado<\/p>\n<p>O padr\u00e3o singleton tamb\u00e9m pode ser customizado para trabalhar de forma sincronizada, conforme exemplo abaixo:<\/p>\n<div>\n<div id=\"highlighter_728997\" class=\"syntaxhighlighter  js\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"js plain\">public class Singleton<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">private static Singleton instance;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">private Singleton() { }<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">public static Singleton Instance<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">get<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">{<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js keyword\">if<\/code> <code class=\"js plain\">(instance == <\/code><code class=\"js keyword\">null<\/code><code class=\"js plain\">)<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">lock (<\/code><code class=\"js keyword\">typeof<\/code><code class=\"js plain\">(Singleton))<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js keyword\">if<\/code> <code class=\"js plain\">(instance == <\/code><code class=\"js keyword\">null<\/code><code class=\"js plain\">) instance = <\/code><code class=\"js keyword\">new<\/code> <code class=\"js plain\">Singleton();<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js keyword\">return<\/code> <code class=\"js plain\">instance;<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"js spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"js plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Linha de C\u00f3digo &#8211; Artigos<\/p>\n<p>via <a href=\"http:\/\/www.linhadecodigo.com.br\/Artigo.aspx?id=3397\">Singleton &#8211; Padr\u00e3o de Projeto com Microsoft .NET C Sharp<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Introdu\u00e7\u00e3o Padr\u00e3o de Projeto ou em ingl\u00eas Design Patterns, \u00e9 uma forma organizada de criar solu\u00e7\u00f5es reutiliz\u00e1veis para os problemas recorrentes do dia a dia de um projetista ou programador. Por que usar Padr\u00e3o de Projeto? \u00c9 poss\u00edvel desenvolver software sem utilizar padr\u00f5es de projetos, e o fato de usar n\u00e3o caracter\u00edstica um c\u00f3digo &hellip; <a href=\"https:\/\/leonardocotta.com.br\/?p=766\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Singleton &#8211; Padr\u00e3o de Projeto com Microsoft .NET C Sharp<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[17,21],"tags":[62,63,88,112,114,117,124,177,184,185,198,238],"class_list":["post-766","post","type-post","status-publish","format-standard","hentry","category-noticias","category-projetos","tag-abertura","tag-abstracao","tag-combinatoriedade","tag-encapsulamento","tag-equilibrio","tag-exemplo","tag-generalidade","tag-microsoft","tag-namespace","tag-nome","tag-padrao-de-projeto","tag-singleton"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/leonardocotta.com.br\/index.php?rest_route=\/wp\/v2\/posts\/766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/leonardocotta.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/leonardocotta.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/leonardocotta.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/leonardocotta.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=766"}],"version-history":[{"count":0,"href":"https:\/\/leonardocotta.com.br\/index.php?rest_route=\/wp\/v2\/posts\/766\/revisions"}],"wp:attachment":[{"href":"https:\/\/leonardocotta.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/leonardocotta.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/leonardocotta.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}