Jak sprawdzić czy obiekt zostać już utworzony?

0

Witam forumowiczow,
mam maly problem i nie bardzo wiem jak sie za temat zabrac (prosze o podpowiedz nie rozwiazanie).. Mianowicie musze zdefiniowac klasę Fabryka implementującą statyczną metodę make. Metoda ta będzie przyjmować jako parametr wartość typu int określającą jaki rodzaj cukierków należy produkować, a zwracać obiekt reprezentujący ten cukierek. Jeżeli cukierek określonego typu był już produkowany w tej fabryce, należy zwrócić jego obiekt. W przeciwnym przypadku metoda make poprzedzi zwrócenie obiektu jego fabrykacją.
Utworzylem taka klase:

class Fabryka
{
    int[] rodzaje = new int[5];
    static Cukierek make(int rodzaj)
    {
        switch (rodzaj)
        {
            case 1: 
            Cukierek rodzaj1 = new Cukierek("truskawkowy");
            return rodzaj1;
            case 2: Cukierek rodzaj2 = new Cukierek("brzoskwiniowy");
            return rodzaj2;
            case 3: Cukierek rodzaj3 = new Cukierek("wisniowy");
            return rodzaj3;
            case 4: Cukierek rodzaj4 = new Cukierek("malinowy");
            return rodzaj4;
            case 5: Cukierek rodzaj5 = new Cukierek("bananowy");
            return rodzaj5;
            default: System.out.println("Wybierz rodzaj cukierka od 0 do 5");
            return null;
        }
    }
}

Z tego co wiem nie ma mozliwosci sprawdzenia czy dany obiekt istnieje, przynajmniej nie znalazlem zadnych informacji na ten temat. Pomyslalem wiec ze bede zapisywal wszystkie tworzone typy cukierkow w tablicy lecz nawet jesli natrafie na utworzony wczesniej cukierek nie moge go zwrocic poniewaz kompilator karze mi go najpierw utworzyc..
Kolejnym problemem jest to, ze nie skorzystac z cukierka utworzonego przez metode make w metodzie main

Fabryka.make(3);
rodzaj1.show();

rodzaj1 cannot be resolved

2
  1. http://en.wikipedia.org/wiki/Flyweight_pattern
  2. Ty sobie robisz jaja? WTF?
Cukierek rodzaj1 = Fabryka.make(3);
rodzaj1.show();
0

Skad wzales

Cukierek rodzaj1 = Fabryka.make(3);

i co jest nie tak z

rodzaj1.show();

rodzaj1 to utworzony obiekt klasy cukierek a show() to metoda tej klasy

2

Chłopie, weź ty do ręki jakiś kurs z podstawami programowania bo co to robisz to jest jakiś WTF. Chcesz pisać fabrykę obiektów a nie rozumiesz jak sie wywołuje metody? o_O Przecież twoja metoda make coś ZWRACA. Jak chcesz cokolwiek zrobić z tym zwróconym obiektem to musisz go do czegoś PRZYPISAĆ.

0

Ja to zrobiłem w ten sposób:

public class Fabryka{
	static Cukierek [] cukierki = new Cukierek [5];
			
	public static Cukierek make(int rodzaj){
		 switch (rodzaj)
	        {
	            case 1:
	            	if(cukierki[0]==null){
	            	Cukierek rodzaj1 = new Cukierek("waniliowy", 50);
	            	cukierki[0] = rodzaj1;
	            	}
	            return cukierki[0];
	            case 2:
	            	if(cukierki[1]==null){
	            		Cukierek rodzaj2 = new Cukierek("kokosowy", 50);
		            	cukierki[1] = rodzaj2;
		            	}
	            return cukierki[1];
	            case 3:
	            	if(cukierki[2]==null){
	            		Cukierek rodzaj3 = new Cukierek("wisniowy", 50);
		            	cukierki[2] = rodzaj3;
		            	}
	            return cukierki[2];
	            case 4:
	            	if(cukierki[3]==null){
	            		Cukierek rodzaj4 = new Cukierek("malinowy", 50);
		            	cukierki[3] = rodzaj4;
		            	}            	
	            return cukierki[3];
	            case 5:
	            	if(cukierki[4]==null){
	            		Cukierek rodzaj5 = new Cukierek("bananowy", 50);
		            	cukierki[4] = rodzaj5;
		            	}
	            return cukierki[4];
	            default: System.out.println("Wybierz rodzaj cukierka od 0 do 5");
	            return null;
	        }
	}
}

Żeby później skorzystać z tych cukierków to musisz je gdzieś przechować tak jak kolega powiedział. Więc tworzysz tablicę obiektów (klasa Cukierek, przygotowywałeś ją we wcześniejszym zadaniu - tak mam te same). Pole int jest tutaj zbędne.

Żeby sprawdzić, czy dany cukierek już był produkowany po prostu robisz warunek taki jak w załączonym kodzie, który sprawdza czy dany element tablicy ma wartość null. Jeżeli tak to znaczy że cukierek nie był produkowany i fabrykujemy obiekt, a jeżeli nie no to zwraca Ci odp. element tablicy, który zawiera ten cukierek.

Proszę się nie czepiać za jakieś błędy logiczne mojej wypowiedzi, ale też dopiero zaczynam i starałem się +- wytłumaczyć mój tok myślenia.

Później żeby skorzystać z tego działasz na zasadzie:

Fabryka.make(3);
Fabryka.cukierki[2].show();

i powinno działać

Założenia zadania są jakie są, dlatego taki kod powstał, a nie inny. A czego mam się wstydzić? Jestem przekonany, że mój post bardziej mu pomógł niż Twoje wywyższanie się. Zapomniał wół, jak cielęciem był.

0

Witam kolegów z uczelni ;)

Moje rozwiązanie wygląda następująco:

public class Fabryka {
	
	static String[] rodzaje = {
		"gorzki",
		"słodki",
		"kwaśny",
	};
	
	static Cukierek[] cukierki = new Cukierek[rodzaje.length];

	public static Cukierek make(int rodzaj) {
		if(rodzaj >= rodzaje.length)
			return null;
		
		if(rodzaje[rodzaj] == null)
			return null;
		
		if(cukierki[rodzaj] == null)
			cukierki[rodzaj] = new Cukierek(rodzaje[rodzaj], 1);
		
		return cukierki[rodzaj];
	}
	
}

Prosiłbym jakiegoś doświadczonego programistę o opinię ;)

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