{"id":18590,"date":"2024-05-06T01:19:34","date_gmt":"2024-05-06T01:19:34","guid":{"rendered":"https:\/\/soloweb.com.br\/blog\/?p=18590"},"modified":"2024-05-18T11:24:21","modified_gmt":"2024-05-18T11:24:21","slug":"como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens","status":"publish","type":"post","link":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/","title":{"rendered":"Como implementar uma classe singleton em Java e em outras linguagens"},"content":{"rendered":"\n<p>Voc\u00ea j\u00e1 se deparou com situa\u00e7\u00f5es em que precisava que apenas uma inst\u00e2ncia de um objeto espec\u00edfico fosse compartilhada em todo o seu aplicativo? Imagine o cen\u00e1rio de uma <strong>Garrafa de Caf\u00e9<\/strong> de escrit\u00f3rio, se cada funcion\u00e1rio que desejasse caf\u00e9, fosse fazer uma nova jarra de caf\u00e9. Em vez disso, todos compartilhariam a mesma garrafa, colocando caf\u00e9 em suas x\u00edcaras conforme necess\u00e1rio. Este conceito de uma inst\u00e2ncia \u00fanica e compartilhada est\u00e1 no objetivo principal das classes que utiliza o padr\u00e3o <strong>singleton, <\/strong>e vamos ver como implementar isso em <strong>Java<\/strong>, e em seguida em outras linguagens como <strong>PHP, Python, JavaScript, C#, Go e Rust<\/strong><\/p>\n\n\n\n<p><strong>O que \u00e9 uma classe Singleton?<\/strong><\/p>\n\n\n\n<p>As classes singleton em Java garantem que apenas uma inst\u00e2ncia da classe seja criada e fornecem um ponto global de acesso a essa inst\u00e2ncia. Isto significa que qualquer parte do programa pode acessar a mesma inst\u00e2ncia da classe, permitindo o gerenciamento centralizado de recursos ou estado.<\/p>\n\n\n\n<p><strong>Singleton<\/strong> \u00e9 um padr\u00e3o de projeto de software. Este padr\u00e3o garante a exist\u00eancia de apenas uma inst\u00e2ncia de uma classe, mantendo um ponto global de acesso ao seu objeto. Nota lingu\u00edstica: O termo vem do significado em ingl\u00eas para um conjunto que contenha apenas um elemento.&nbsp;<a href=\"https:\/\/pt.wikipedia.org\/wiki\/Singleton\">Wikip\u00e9dia<\/a><\/p>\n\n\n\n<p><strong>Implementando uma classe Singleton: a analogia da Garrafa de Caf\u00e9<\/strong><\/p>\n\n\n\n<p>Vamos traduzir a analogia da garrafa de caf\u00e9 em uma classe singleton Java chamada&nbsp;<code><strong>CoffeeBottle<\/strong><\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class CoffeeBottle {\n    private int coffeeQuantity = 900;\n    private static CoffeeBottle instance = null;\n    \/\/ Construtor privado para evitar instancia\u00e7\u00e3o externa\n    private CoffeeBottle() {} \n    \/\/ M\u00e9todo para prestar o servi\u00e7o de pegar\/dar caf\u00e9\n    public int getCoffee(int quantity){\n        coffeeQuantity -= quantity;\n        return quantity;\n    }\n    \/\/ M\u00e9todo para retornar o objeto ao usu\u00e1rio\n    public static synchronized CoffeeBottle getInstance(){\n        if(instance == null){\n            instance = new CoffeeBottle();\n        }\n        return instance;\n    }\n    \/\/ Obter quantidade de caf\u00e9\n    public int getCoffeeQuantity(){\n        return coffeeQuantity;\n    }\n }<\/code><\/pre>\n\n\n\n<p>Uma observa\u00e7\u00e3o em rela\u00e7\u00e3o \u00e0 concorr\u00eancia. Para proteger o c\u00f3digo, a thread-safe, o que significa que se m\u00faltiplas threads chamarem o m\u00e9todo <code>getInstance()<\/code> simultaneamente, e poder criar m\u00faltiplas inst\u00e2ncias da classe. E para tornar o Singleton thread-safe, adicionamos sincroniza\u00e7\u00e3o ao m\u00e9todo <code>getInstance()<\/code>, ficando assim a assinatura: <strong>public static synchronized CoffeeBottle getInstance(){ &#8230; }<\/strong><\/p>\n\n\n\n<p><strong>Compreendendo o C\u00f3digo:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Temos um construtor privado para evitar a instancia\u00e7\u00e3o externa da classe.<\/li>\n\n\n\n<li>O&nbsp;<code>getInstance()<\/code>m\u00e9todo fornece uma maneira de acessar a \u00fanica inst\u00e2ncia da classe. Se a inst\u00e2ncia ainda n\u00e3o estiver criada, ele cria uma e a retorna.<\/li>\n\n\n\n<li>O&nbsp;<code><strong>getCoffee<\/strong>()<\/code>m\u00e9todo simula o ato de tirar caf\u00e9 da garrafa, reduzindo a quantidade de caf\u00e9.<\/li>\n<\/ul>\n\n\n\n<p><strong>Exemplo de uso:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Testando e utilizando nossa classe\n\/\/ Obtenha a inst\u00e2ncia singleton\nCoffeeBottle cof = CoffeeBottle.getInstance();\n\n\/\/ Funcion\u00e1rio usam a mesma garrafa para pegar caf\u00e9\nint coffeeTaken = cof.getCoffee(50); \/\/ Funcion\u00e1rio gega 50ml\nSystem.out.println(\"Caf\u00e9 pego: \" + coffeeTaken + \"ml\");\n\/\/ Sa\u00edda: Caf\u00e9 pego: 50ml\nSystem.out.println(\"Quantidade de caf\u00e9 na garrafa: \" + cof.getCoffeeQuantity() + \"ml\");\n\/\/ Sa\u00edda: Quantidade de caf\u00e9 na garrafa: 850ml\n\n\/\/ Outro funcion\u00e1rio pega 70 ml de caf\u00e9\ncoffeeTaken = cof.getCoffee(70); \nSystem.out.println(\"Caf\u00e9 pego: \" + coffeeTaken + \"ml\");\n\/\/ Sa\u00edda: Caf\u00e9 pego: 70ml\nSystem.out.println(\"Quantidade de caf\u00e9 na garrafa: \" + cof.getCoffeeQuantity() + \"ml\");\n\/\/ Sa\u00edda: Quantidade de caf\u00e9 na garrafa: 780ml<\/code><\/pre>\n\n\n\n<p>Embora a implementa\u00e7\u00e3o acima forne\u00e7a uma forma b\u00e1sica de seguran\u00e7a, existem abordagens mais robustas.<\/p>\n\n\n\n<p>As classes singleton em Java oferecem uma maneira conveniente de garantir que apenas uma inst\u00e2ncia de uma classe seja criada e acessada globalmente. Ao compreender o conceito por meio de analogias da vida real, como o cen\u00e1rio da garrafa de caf\u00e9 do escrit\u00f3rio, voc\u00ea pode compreender a import\u00e2ncia e a utilidade das classes singleton em seus aplicativos.<\/p>\n\n\n\n<p><strong>E como fica em outras linguagens?<\/strong><\/p>\n\n\n\n<p>Agora vamos ver como fica esta classe na linguagem <strong>PHP<\/strong><\/p>\n\n\n\n<p>Em PHP, voc\u00ea pode implementar o padr\u00e3o Singleton de maneira semelhante \u00e0 forma como \u00e9 feito em Java, embora com algumas diferen\u00e7as sint\u00e1ticas. Aqui est\u00e1 como o c\u00f3digo poderia ser escrito em PHP:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class CoffeeBottle {\n    private $coffeeQuantity = 900;\n    private static $instance = null;\n    \/\/ Construtor privado para evitar instancia\u00e7\u00e3o externa\n    private function __construct() {} \n    \/\/ M\u00e9todo para prestar o servi\u00e7o de pegar\/dar caf\u00e9\n    public function getCoffee($quantity){\n        $this-&gt;coffeeQuantity -= $quantity;\n        return $quantity;\n    }\n    \/\/ M\u00e9todo para retornar o objeto ao usu\u00e1rio\n    public static function getInstance(){\n        \/\/ Criar\u00e1 um novo objeto se o objeto ainda n\u00e3o tiver sido criado e retorna este\n        if(self::$instance === null){\n            self::$instance = new CoffeeBottle();\n        }\n        return self::$instance;\n    }\n    \/\/ Obter quantidade de caf\u00e9\n    public function getCoffeeQuantity(){\n        return $this-&gt;coffeeQuantity;\n    }\n}\n\n\/\/ Testando e utilizando nossa classe\n\/\/ Obtenha a inst\u00e2ncia singleton\n$cof = CoffeeBottle::getInstance();\n\n\/\/ Funcion\u00e1rio usam a mesma garrafa para pegar caf\u00e9\n$coffeeTaken = $cof-&gt;getCoffee(50); \/\/ Funcion\u00e1rio pega 50ml\necho \"Caf\u00e9 pego: $coffeeTaken ml\\n\"; \n\/\/ Sa\u00edda: Caf\u00e9 pego: 50ml\necho \"Quantidade de caf\u00e9 na garrafa: \" . $cof-&gt;getCoffeeQuantity() . \" ml\\n\"; \n\/\/ Sa\u00edda: Quantidade de caf\u00e9 na garrafa: 850ml\n<\/code><\/pre>\n\n\n\n<p>Vamos ver como fica esta classe na linguagem <strong>Python<\/strong><\/p>\n\n\n\n<p>Em Python, implementar o padr\u00e3o Singleton \u00e9 um pouco diferente de outras linguagens, devido \u00e0 natureza din\u00e2mica e flex\u00edvel da linguagem. Aqui est\u00e1 como voc\u00ea pode implementar o padr\u00e3o Singleton em Python:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class CoffeeBottle:\n    _instance = None\n    def __init__(self):\n        self._coffee_quantity = 900\n    @staticmethod\n    def get_instance():\n        if CoffeeBottle._instance is None:\n            CoffeeBottle._instance = CoffeeBottle()\n        return CoffeeBottle._instance\n    def get_coffee(self, quantity):\n        self._coffee_quantity -= quantity\n        return quantity\n    def get_coffee_quantity(self):\n        return self._coffee_quantity\n\n\n# Testando e utilizando nossa classe\n# Obtenha a inst\u00e2ncia singleton\ncof = CoffeeBottle.get_instance()\n\n# Funcion\u00e1rio usam a mesma garrafa para pegar caf\u00e9\ncoffee_taken = cof.get_coffee(50)  # Funcion\u00e1rio pega 50ml\nprint(f\"Caf\u00e9 pego: {coffee_taken} ml\")  \n# Sa\u00edda: Caf\u00e9 pego: 50ml\nprint(f\"Quantidade de caf\u00e9 na garrafa: {cof.get_coffee_quantity()} ml\")  \n# Sa\u00edda: Quantidade de caf\u00e9 na garrafa: 850ml\n<\/code><\/pre>\n\n\n\n<p>Agora vamos ver como fica essa implementa\u00e7\u00e3o em <strong>JavaScript<\/strong><\/p>\n\n\n\n<p>Em JavaScript, o padr\u00e3o Singleton pode ser implementado de v\u00e1rias maneiras devido \u00e0 natureza flex\u00edvel da linguagem. Aqui est\u00e1 uma maneira de implement\u00e1-lo usando uma fun\u00e7\u00e3o construtora:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let CoffeeBottle = (function () {\n    let instance;\n    function CoffeeBottle() {\n        this.coffeeQuantity = 900;\n    }\n    CoffeeBottle.prototype.getCoffee = function (quantity) {\n        this.coffeeQuantity -= quantity;\n        return quantity;\n    };\n    CoffeeBottle.prototype.getCoffeeQuantity = function () {\n        return this.coffeeQuantity;\n    };\n    return {\n        getInstance: function () {\n            if (!instance) {\n                instance = new CoffeeBottle();\n            }\n            return instance;\n        }\n    };\n})();\n\n\/\/ Testando e utilizando nossa classe\n\/\/ Obtenha a inst\u00e2ncia singleton\nlet cof = CoffeeBottle.getInstance();\n\n\/\/ Funcion\u00e1rio usam a mesma garrafa para pegar caf\u00e9\nlet coffeeTaken = cof.getCoffee(50); \/\/ Funcion\u00e1rio pega 50ml\nconsole.log(\"Caf\u00e9 pego: \" + coffeeTaken + \" ml\"); \n\/\/ Sa\u00edda: Caf\u00e9 pego: 50ml\nconsole.log(\"Quantidade de caf\u00e9 na garrafa: \" + cof.getCoffeeQuantity() + \" ml\"); \n\/\/ Sa\u00edda: Quantidade de caf\u00e9 na garrafa: 850ml\n<\/code><\/pre>\n\n\n\n<p>Como fica em <strong>C#<\/strong><\/p>\n\n\n\n<p>Em C#, o padr\u00e3o Singleton pode ser implementado de v\u00e1rias maneiras. Aqui est\u00e1 uma maneira comum de implement\u00e1-lo usando uma combina\u00e7\u00e3o de um campo privado est\u00e1tico e um m\u00e9todo p\u00fablico est\u00e1tico para obter a inst\u00e2ncia \u00fanica da classe:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class CoffeeBottle\n{\n    private static CoffeeBottle instance;\n    private int coffeeQuantity = 900;\n    \/\/ Construtor privado para evitar instancia\u00e7\u00e3o externa\n    private CoffeeBottle() { }\n    \/\/ M\u00e9todo est\u00e1tico para retornar a inst\u00e2ncia \u00fanica\n    public static CoffeeBottle GetInstance()\n    {\n        \/\/ Cria uma nova inst\u00e2ncia se ainda n\u00e3o foi criada\n        if (instance == null)\n        {\n            instance = new CoffeeBottle();\n        }\n        return instance;\n    }\n    \/\/ M\u00e9todo para prestar o servi\u00e7o de pegar\/dar caf\u00e9\n    public int GetCoffee(int quantity)\n    {\n        coffeeQuantity -= quantity;\n        return quantity;\n    }\n    \/\/ M\u00e9todo para retornar a quantidade de caf\u00e9 na garrafa\n    public int GetCoffeeQuantity()\n    {\n        return coffeeQuantity;\n    }\n}\n\nclass Program\n{\n    static void Main(string&#91;] args)\n    {\n        \/\/ Testando e utilizando nossa classe\n        \/\/ Obtenha a inst\u00e2ncia singleton\n        CoffeeBottle cof = CoffeeBottle.GetInstance();\n\n        \/\/ Funcion\u00e1rio usam a mesma garrafa para pegar caf\u00e9\n        int coffeeTaken = cof.GetCoffee(50); \/\/ Funcion\u00e1rio pega 50ml\n        Console.WriteLine(\"Caf\u00e9 pego: \" + coffeeTaken + \"ml\"); \n        \/\/ Sa\u00edda: Caf\u00e9 pego: 50ml\n        Console.WriteLine(\"Quantidade de caf\u00e9 na garrafa: \" + cof.GetCoffeeQuantity() + \"ml\"); \n        \/\/ Sa\u00edda: Quantidade de caf\u00e9 na garrafa: 850ml\n    }\n}<\/code><\/pre>\n\n\n\n<p>Como fica na linguagem <strong>GO?<\/strong><\/p>\n\n\n\n<p>Em Go, o conceito de Singleton \u00e9 um pouco diferente porque a linguagem n\u00e3o possui classes ou construtores no sentido tradicional. No entanto, podemos implementar um padr\u00e3o similar garantindo que apenas uma inst\u00e2ncia de uma estrutura seja criada e acessada de forma segura. Uma forma comum de fazer isso \u00e9 utilizando uma vari\u00e1vel global e uma fun\u00e7\u00e3o para acess\u00e1-la. Aqui est\u00e1 um exemplo de como isso pode ser feito em Go:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport (\n    \"fmt\"\n    \"sync\"\n)\n\/\/ CoffeeBottle representa a garrafa de caf\u00e9\ntype CoffeeBottle struct {\n    coffeeQuantity int\n}\n\/\/ singletonInstance mant\u00e9m a inst\u00e2ncia \u00fanica da CoffeeBottle\nvar singletonInstance *CoffeeBottle\nvar once sync.Once\n\/\/ GetInstance retorna a inst\u00e2ncia \u00fanica de CoffeeBottle\nfunc GetInstance() *CoffeeBottle {\n    once.Do(func() {\n        singletonInstance = &amp;CoffeeBottle{coffeeQuantity: 900}\n    })\n    return singletonInstance\n}\n\/\/ GetCoffee pega uma quantidade espec\u00edfica de caf\u00e9 da garrafa\nfunc (c *CoffeeBottle) GetCoffee(quantity int) int {\n    c.coffeeQuantity -= quantity\n    return quantity\n}\n\/\/ GetCoffeeQuantity retorna a quantidade atual de caf\u00e9 na garrafa\nfunc (c *CoffeeBottle) GetCoffeeQuantity() int {\n    return c.coffeeQuantity\n}\n\nfunc main() {\n    \/\/ Testando e utilizando nossa classe\n    \/\/ Obtenha a inst\u00e2ncia singleton\n    cof := GetInstance()\n\n    \/\/ Funcion\u00e1rio usam a mesma garrafa para pegar caf\u00e9\n    coffeeTaken := cof.GetCoffee(50) \/\/ Funcion\u00e1rio pega 50ml\n    fmt.Printf(\"Caf\u00e9 pego: %d ml\\n\", coffeeTaken) \n    \/\/ Sa\u00edda: Caf\u00e9 pego: 50ml\n    fmt.Printf(\"Quantidade de caf\u00e9 na garrafa: %d ml\\n\", cof.GetCoffeeQuantity()) \n    \/\/ Sa\u00edda: Quantidade de caf\u00e9 na garrafa: 850ml\n}<\/code><\/pre>\n\n\n\n<p>Neste exemplo em Go:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Criamos uma estrutura <code>CoffeeBottle<\/code> para representar a garrafa de caf\u00e9.<\/li>\n\n\n\n<li>Usamos uma vari\u00e1vel global <code>singletonInstance<\/code> para armazenar a \u00fanica inst\u00e2ncia da estrutura <code>CoffeeBottle<\/code>.<\/li>\n\n\n\n<li>Usamos a fun\u00e7\u00e3o <code>GetInstance()<\/code> para garantir que apenas uma inst\u00e2ncia de <code>CoffeeBottle<\/code> seja criada. Utilizamos o pacote <code>sync<\/code> e a fun\u00e7\u00e3o <code>once.Do()<\/code> para garantir que a inicializa\u00e7\u00e3o seja executada apenas uma vez.<\/li>\n\n\n\n<li>Implementamos m\u00e9todos na estrutura <code>CoffeeBottle<\/code> para pegar caf\u00e9 e verificar a quantidade de caf\u00e9 na garrafa.<\/li>\n\n\n\n<li>No m\u00e9todo <code>main()<\/code>, testamos e usamos a classe <code>CoffeeBottle<\/code> para demonstrar o padr\u00e3o Singleton em a\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<p>E a implementa\u00e7\u00e3o desta classe em <strong>Rust?<\/strong><\/p>\n\n\n\n<p>Em Rust, o conceito de Singleton \u00e9 um pouco diferente de outras linguagens de programa\u00e7\u00e3o, devido \u00e0s restri\u00e7\u00f5es de propriedade e ao sistema de tipos de Rust. Uma maneira comum de implementar um padr\u00e3o similar \u00e9 usando um m\u00f3dulo para encapsular a inst\u00e2ncia \u00fanica e fornecer uma fun\u00e7\u00e3o para acess\u00e1-la. Aqui est\u00e1 um exemplo de como isso pode ser feito em Rust:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>use std::sync::{Arc, Mutex};\n\n\/\/ Struct que representa a garrafa de caf\u00e9\npub struct CoffeeBottle {\n    coffee_quantity: i32,\n}\n\n\/\/ Fun\u00e7\u00e3o para criar a inst\u00e2ncia \u00fanica de CoffeeBottle\npub fn get_instance() -&gt; Arc&lt;Mutex&lt;CoffeeBottle&gt;&gt; {\n    static mut INSTANCE: Option&lt;Arc&lt;Mutex&lt;CoffeeBottle&gt;&gt;&gt; = None;\n    static INIT: std::sync::Once = std::sync::Once::new();\n    INIT.call_once(|| {\n        unsafe {\n            INSTANCE = Some(Arc::new(Mutex::new(CoffeeBottle { coffee_quantity: 900 })));\n        }\n    });\n    unsafe { INSTANCE.clone().unwrap() }\n}\n\nimpl CoffeeBottle {\n    \/\/ M\u00e9todo para pegar uma quantidade espec\u00edfica de caf\u00e9 da garrafa\n    pub fn get_coffee(&amp;mut self, quantity: i32) -&gt; i32 {\n        self.coffee_quantity -= quantity;\n        quantity\n    }\n    \/\/ M\u00e9todo para obter a quantidade atual de caf\u00e9 na garrafa\n    pub fn get_coffee_quantity(&amp;self) -&gt; i32 {\n        self.coffee_quantity\n    }\n}\n\nfn main() {\n    \/\/ Testando e utilizando nossa classe\n    \/\/ Obtenha a inst\u00e2ncia singleton\n    let mut cof = get_instance().lock().unwrap();\n\n    \/\/ Funcion\u00e1rio usam a mesma garrafa para pegar caf\u00e9\n    let coffee_taken = cof.get_coffee(50); \/\/ Funcion\u00e1rio pega 50ml\n    println!(\"Caf\u00e9 pego: {} ml\", coffee_taken); \n    \/\/ Sa\u00edda: Caf\u00e9 pego: 50ml\n    println!(\"Quantidade de caf\u00e9 na garrafa: {} ml\", cof.get_coffee_quantity()); \n    \/\/ Sa\u00edda: Quantidade de caf\u00e9 na garrafa: 850ml\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea j\u00e1 se deparou com situa\u00e7\u00f5es em que precisava que apenas uma inst\u00e2ncia de um objeto espec\u00edfico fosse compartilhada em<\/p>\n","protected":false},"author":4,"featured_media":18592,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","footnotes":""},"categories":[227,303,8,241,132],"tags":[656,272,224,70,655,657,654],"class_list":["post-18590","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desempenho","category-destaque-secundario","category-java","category-javascript-2","category-php","tag-go","tag-java","tag-javascript","tag-php","tag-pyton","tag-rust","tag-singleton"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Como implementar uma classe singleton em Java e em outras linguagens - SOLOWEB Tecnologia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como implementar uma classe singleton em Java e em outras linguagens - SOLOWEB Tecnologia\" \/>\n<meta property=\"og:description\" content=\"Voc\u00ea j\u00e1 se deparou com situa\u00e7\u00f5es em que precisava que apenas uma inst\u00e2ncia de um objeto espec\u00edfico fosse compartilhada em\" \/>\n<meta property=\"og:url\" content=\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/\" \/>\n<meta property=\"og:site_name\" content=\"SOLOWEB Tecnologia\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-06T01:19:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-18T11:24:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2024\/05\/WhatsApp-Image-2024-05-05-at-16.56.12.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"940\" \/>\n\t<meta property=\"og:image:height\" content=\"787\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Carlos Rolim\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlos Rolim\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/\"},\"author\":{\"name\":\"Carlos Rolim\",\"@id\":\"https:\/\/soloweb.com.br\/blog\/#\/schema\/person\/b10ff5bc260b411c2d82b19fad8ae3f1\"},\"headline\":\"Como implementar uma classe singleton em Java e em outras linguagens\",\"datePublished\":\"2024-05-06T01:19:34+00:00\",\"dateModified\":\"2024-05-18T11:24:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/\"},\"wordCount\":892,\"publisher\":{\"@id\":\"https:\/\/soloweb.com.br\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2024\/05\/WhatsApp-Image-2024-05-05-at-16.56.12.jpeg\",\"keywords\":[\"Go\",\"java\",\"javascript\",\"PHP\",\"pyton\",\"Rust\",\"singleton\"],\"articleSection\":[\"Desempenho\",\"Destaque Secund\u00e1rio\",\"Java\",\"Javascript\",\"PHP\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/\",\"url\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/\",\"name\":\"Como implementar uma classe singleton em Java e em outras linguagens - SOLOWEB Tecnologia\",\"isPartOf\":{\"@id\":\"https:\/\/soloweb.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2024\/05\/WhatsApp-Image-2024-05-05-at-16.56.12.jpeg\",\"datePublished\":\"2024-05-06T01:19:34+00:00\",\"dateModified\":\"2024-05-18T11:24:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#primaryimage\",\"url\":\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2024\/05\/WhatsApp-Image-2024-05-05-at-16.56.12.jpeg\",\"contentUrl\":\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2024\/05\/WhatsApp-Image-2024-05-05-at-16.56.12.jpeg\",\"width\":940,\"height\":787},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/soloweb.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como implementar uma classe singleton em Java e em outras linguagens\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/soloweb.com.br\/blog\/#website\",\"url\":\"https:\/\/soloweb.com.br\/blog\/\",\"name\":\"SOLOWEB Tecnologia\",\"description\":\"SOLOWEB Tecnologia\",\"publisher\":{\"@id\":\"https:\/\/soloweb.com.br\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/soloweb.com.br\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/soloweb.com.br\/blog\/#organization\",\"name\":\"SOLOWEB Tecnologia\",\"url\":\"https:\/\/soloweb.com.br\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/soloweb.com.br\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/04\/cropped-solo.png\",\"contentUrl\":\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/04\/cropped-solo.png\",\"width\":341,\"height\":94,\"caption\":\"SOLOWEB Tecnologia\"},\"image\":{\"@id\":\"https:\/\/soloweb.com.br\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/soloweb.com.br\/blog\/#\/schema\/person\/b10ff5bc260b411c2d82b19fad8ae3f1\",\"name\":\"Carlos Rolim\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/soloweb.com.br\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/avatar_user_4_1674993909-96x96.png\",\"contentUrl\":\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/avatar_user_4_1674993909-96x96.png\",\"caption\":\"Carlos Rolim\"},\"sameAs\":[\"http:\/\/carlosrolim.com\"],\"url\":\"https:\/\/soloweb.com.br\/blog\/author\/carlos\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Como implementar uma classe singleton em Java e em outras linguagens - SOLOWEB Tecnologia","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:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/","og_locale":"pt_BR","og_type":"article","og_title":"Como implementar uma classe singleton em Java e em outras linguagens - SOLOWEB Tecnologia","og_description":"Voc\u00ea j\u00e1 se deparou com situa\u00e7\u00f5es em que precisava que apenas uma inst\u00e2ncia de um objeto espec\u00edfico fosse compartilhada em","og_url":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/","og_site_name":"SOLOWEB Tecnologia","article_published_time":"2024-05-06T01:19:34+00:00","article_modified_time":"2024-05-18T11:24:21+00:00","og_image":[{"width":940,"height":787,"url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2024\/05\/WhatsApp-Image-2024-05-05-at-16.56.12.jpeg","type":"image\/jpeg"}],"author":"Carlos Rolim","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Carlos Rolim","Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#article","isPartOf":{"@id":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/"},"author":{"name":"Carlos Rolim","@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/person\/b10ff5bc260b411c2d82b19fad8ae3f1"},"headline":"Como implementar uma classe singleton em Java e em outras linguagens","datePublished":"2024-05-06T01:19:34+00:00","dateModified":"2024-05-18T11:24:21+00:00","mainEntityOfPage":{"@id":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/"},"wordCount":892,"publisher":{"@id":"https:\/\/soloweb.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#primaryimage"},"thumbnailUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2024\/05\/WhatsApp-Image-2024-05-05-at-16.56.12.jpeg","keywords":["Go","java","javascript","PHP","pyton","Rust","singleton"],"articleSection":["Desempenho","Destaque Secund\u00e1rio","Java","Javascript","PHP"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/","url":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/","name":"Como implementar uma classe singleton em Java e em outras linguagens - SOLOWEB Tecnologia","isPartOf":{"@id":"https:\/\/soloweb.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#primaryimage"},"image":{"@id":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#primaryimage"},"thumbnailUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2024\/05\/WhatsApp-Image-2024-05-05-at-16.56.12.jpeg","datePublished":"2024-05-06T01:19:34+00:00","dateModified":"2024-05-18T11:24:21+00:00","breadcrumb":{"@id":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#primaryimage","url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2024\/05\/WhatsApp-Image-2024-05-05-at-16.56.12.jpeg","contentUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2024\/05\/WhatsApp-Image-2024-05-05-at-16.56.12.jpeg","width":940,"height":787},{"@type":"BreadcrumbList","@id":"https:\/\/soloweb.com.br\/blog\/2024\/05\/06\/como-implementar-uma-classe-singleton-em-java-e-em-outras-linguagens\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/soloweb.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Como implementar uma classe singleton em Java e em outras linguagens"}]},{"@type":"WebSite","@id":"https:\/\/soloweb.com.br\/blog\/#website","url":"https:\/\/soloweb.com.br\/blog\/","name":"SOLOWEB Tecnologia","description":"SOLOWEB Tecnologia","publisher":{"@id":"https:\/\/soloweb.com.br\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/soloweb.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/soloweb.com.br\/blog\/#organization","name":"SOLOWEB Tecnologia","url":"https:\/\/soloweb.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/04\/cropped-solo.png","contentUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/04\/cropped-solo.png","width":341,"height":94,"caption":"SOLOWEB Tecnologia"},"image":{"@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/person\/b10ff5bc260b411c2d82b19fad8ae3f1","name":"Carlos Rolim","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/person\/image\/","url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/avatar_user_4_1674993909-96x96.png","contentUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/avatar_user_4_1674993909-96x96.png","caption":"Carlos Rolim"},"sameAs":["http:\/\/carlosrolim.com"],"url":"https:\/\/soloweb.com.br\/blog\/author\/carlos\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/18590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=18590"}],"version-history":[{"count":21,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/18590\/revisions"}],"predecessor-version":[{"id":18615,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/18590\/revisions\/18615"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/media\/18592"}],"wp:attachment":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=18590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=18590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=18590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}