[ kolani83 @ 12.04.2013. 08:10 ] @
Imam algoritam koji racuna nesto. E sada taj algoritam se ponavlja na vise mesta s tim sto u nekoj situciji zove jednu metodu za izracunavanje a u nekoj drugi.
Ponavlaj mi se isti kod na vise mesta koji se razlikuje za jedan red.
Potrbna mi je ideja kako to da spakujem u jedan i na osnovu parametra u metodi algoritma da zove tu metodu koja je potrbna.
Java Enum da bude parametar ili ...
[ Java Beograd @ 12.04.2013. 08:20 ] @
Smestiš taj kod u jednu funkciju, i pozivaš funkciju sa nekim parametrom. U zavisnosti od parametra, koristiš pojedinosti iz koda.
[ kolani83 @ 12.04.2013. 10:56 ] @
Da li je dobro resenje da koristin Enum
public enum Method {
METHOD1,METHOD2
}

public int calculate(int x, Method){
switch (METHOD) {
case METHOD1:
return method1(x);


case METHOD2:
return method2(x);
}
}

public method1(int x){
//do some
}
public method2(int x){
//do some
}
[ branecns @ 12.04.2013. 19:08 ] @
Citat:
kolani83:
Imam algoritam koji racuna nesto. E sada taj algoritam se ponavlja na vise mesta s tim sto u nekoj situciji zove jednu metodu za izracunavanje a u nekoj drugi.
Ponavlaj mi se isti kod na vise mesta koji se razlikuje za jedan red.
Potrbna mi je ideja kako to da spakujem u jedan i na osnovu parametra u metodi algoritma da zove tu metodu koja je potrbna.
Java Enum da bude parametar ili ...


Umesto da pozivas calculate metod koji ima enum kao paramatar, stavi 'direktno' tvoj methodx kao parametar. E sad, posto java to bas tako direktno ne moze, mozes umesto toga kao parametar da podmetnes objekat koji ce biti nosac tih methodx() metoda. Napravis prvo interfejs, primera radi:

Code:

public interface Computable {
    int compute();
}


Pa ga onda implementiras, to bi znaci bio konkretno tvoj method1:

Code:

public class ComputatorA implements Computable {
    @Override
    public int compute() {
        return 1;
    }
}


I sad tvoj glavni calculate metod izgleda nekako ovako:

Code:

public int calculate(Computable c) {
    // ...
    int res = c.compute();
    // ...
}


A njegovi pozivi su

Code:

calculate(new ComputatorA());
calculate(new ComputatorB());
...


Na taj nacin si ponasanje jednog metoda specijalizovao drugim metodom koga prenosis kao parametar. Pogledaj npr klasu Arrays i static metode za sortiranje. Oni kao parametar primaju referencu na komparator, ciji compare metodi specijalizuju osnovni sort metod.