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, botów: 0