Jak zadeklarować aby obiekt mógł być użyty tylko raz?

0

Witam,
Moje pytanie brzmi: jak zadeklarować klasie obiektu, że może on być użyty tylko raz?
Chce zagwarantować iż przez cały okres życia programu może powstać dokładnie jeden obiekt klasy Punkt. w innym przypadku np. wystąpi błąd w kompilacji.

///////////////////////////////////////////////////////////////////////////////////////////////////

public class Punkt {

	private int x;
	private int y;
	
	public Punkt(int x, int y){
		this.x = x;
		this.y = y;
	}
	
	public void show() {
	
		System.out.println(this.x + this.y);
	}
	
	
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


public class test {

	
	public static void main(String[] args) {
		Punkt kropka = new Punkt(2, 2); 
		kropka.show();
		
		
		Punkt kropka2 = new Punkt(2, 2);

// chce aby taki obiekt klasy Punkt nie mógł powstać po raz kolejny.

	kropka2.show(); 
	}

}

0

Przeczytaj na wiki o wzorcu Singleton.

0

no okej przeczytałem, ale szczerze mówiąc nie za bardzo umiem to wykorzystać. hmm moze jakis przyklad ;>?

1
final class Foo
{
    private static Foo instance = null;
    
    private Foo(){}

    public static getInstance()
    {
        if(instance == null)
        {
            instance = new Foo();
        }
        return instance;
    }
}

Będzie można utworzyć tylko jedną instancję klasy Foo i dodatkowo nie będzie można po niej dziedziczyć(final)

0

a jednak coś pokręciłem... hmm co jest nie tak?
ps. dopiero sie uczę :P

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

final class Punkt {
	private static Punkt instance = null;
	
	private static int x;
	private static int y;
	
	Punkt(int x, int y){
		Punkt.x = x;
		Punkt.y = y;
	}
	
	public static Punkt getInstance()
	{
		if(instance == null)
		{
			instance = new Punkt(x, y);
		}
		return instance;
	}
	
	public void show(){
		System.out.println("x= " + x + "y= "+ y);
	}
	
	
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


public class test {

	
	public static void main(String[] args) {
		Punkt kropka = new Punkt(2, 2); 
		kropka.show();
		
		Punkt kolejnydzialajacyobj = new Punkt(4, 5);
		kolejnydzialajacyobj.show();
		
		
	}

}
0

Jakieś sugestie ?

0

Zrób ten konstruktor konstruktorem prywatnym - nic spoza klasy nie będzie mogło go wywołać, więc i stworzyć obiektu.
Ogólnie wygląda mi to na błędne rozumowanie w tym wypadku. Dlaczego można użyć tylko jednego obiektu klasy Punkt?

Możesz zrobić jeszcze tak:

class Foo
{
    private static boolean onceCreated = false;
    Foo()
    {
        if(onceCreated)
        {
            throw new Exception("Ups...");
        }
        onceCreated = true;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1