Padrão de Projeto - Singleton

Estou tentando aprender o padrões de projeto, estou com problemas com o padrão Singleton, tenho as seguintes classes Presidencia e a SingletonPrincipal
Onde a classe Presidencia seria a implementação do Singleton.

public class Presidencia {
   private volatile static Presidencia uniqueintance;
   
   private String nomePresidente;

   private Presidencia() {}

   public void setnomepresidente(String nomePresidente){
	   this.nomePresidente = nomePresidente;
   }
   public String getNomePresidente(){
	   return nomePresidente; 
	}
   public static Presidencia getIntance(){
	   if(uniqueintance == null){
		   uniqueintance = new Presidencia();
		}
	   return uniqueintance;
   	}	
}

A outra classe seria meu main()

package br.edu.utfpr.aplicacao;
import br.edu.utfpr.patterns.singleton.Presidencia;

public class SingletonPrincipal { 
   public static void main(String[] args) {
      Presidencia p1 = Presidencia.getIntance();
      p1.setnomepresidente("Juscelino Kubitschek");
      System.out.println("Presidente " + p1.getNomePresidente());

      Presidencia p2 = Presidencia.getIntance();
      p2.setnomepresidente("Fernando");
      System.out.println("Presidente p2 " + p2.getNomePresidente());
      
      System.out.println("Presidente p1 " + p1.getNomePresidente());
   } 
} 

O meu problema é na hora de imprimir isso, tipo o objeto do tipo p2, ta substituindo o objeto do tipo p1.
Se alguem puder me ajudar, desse já agradeço.

ops…
o construtor ta certo

kra vc sabe pra que serve o singleton?

se vc nao quer que substitui o p2 pelo p1 nao deveria usar singleton ou então deveria criar um array na classe Presidencia neh

Pelo que eu entendi redr4gon o Singleton tem a idéia de vc fazer somente uma estanciacao do objeto…
Desculpa pela minha falta de entendimento mas vc teria um exemplo usando o array.

O padrão singleton serve para vc manter so uma instancia da classe que implementar este padrao…um uso comum dele é em classes que fazem conexao com o banco de dados…assim vc naum corre o risco de abrir mais de uma conexao…

o que esta acontecendo é o certo…

vc pega a instancia da classe
set o nome e exibe ele

 Presidencia p1 = Presidencia.getIntance();  
      p1.setnomepresidente("Juscelino Kubitschek");  
      System.out.println("Presidente " + p1.getNomePresidente()); 

depois vc pega novamente a instancia da classe

Presidencia p2 = Presidencia.getIntance();  //aqui é retornado para vc a referencia do objeto ja existente
      p2.setnomepresidente("Fernando");  //aqui vc altera o objeto existente , o mesmo objeto q é referenciado pela variavel p1
      System.out.println("Presidente p2 " + p2.getNomePresidente()); 

por isso p1 e p2 referenciam o mesmo objeto…sendo assim qualquer alteração atraves de qualquer uma das referecias altera o objeto q é um so

acho que voce deve verificar a necessidade de usar o padrao ou nao…

resumindo = o padrão singleton mantem so uma instancia da classe que segue este padrao…

Muito obrigado, Lucas Abbatepaolo pela explicação, agora sim entendi.Abraço…