• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie związane z implementacją interfejsów

42 Warsaw Coding Academy
0 głosów
1,582 wizyt
pytanie zadane 10 października 2019 w Java przez magicznyukf Początkujący (260 p.)

Witam,

Kiedyś dostałem zadanie rekrutacyjne w pewnej firmie. Teraz znalazłem je na dysku i chciałem zrobić, ale nie do końca rozumiem o co chodzi.

 

Treść zadania: 

Poniżej przekazujemy zadanie z prośbą o analizę poniższego kodu i zaimplementowanie metod findByCode, findByRenderer, count w klasie MyStructure - najchętniej unikając powielania kodu i umieszczając całą logikę w klasie MyStructure. Z uwzględnieniem w analizie i implementacji interfejs ICompositeNode!  

interface IMyStructure {
  // zwraca węzeł o podanym kodzie lub null
  INode findByCode(String code);
  // zwraca węzeł o podanym rendererze lub null
  INode findByRenderer(String renderer);
  //zwraca liczbę węzłów
  int count();
}

public class MyStructure implements IMyStructure {
  private List<INode> nodes;
}

interface INode {
  String getCode();
  String getRenderer();
}

interface ICompositeNode extends INode {
  List<INode> getNodes();
}

Wydawało mi się, że zrobiłem to zadanie, ale nie doczytałem ostatniego zdania. Miałem coś takiego:

public class MyStructure implements IMyStructure {
        private List<INode> nodes;

        @Override
        public INode findByCode(String code) {


            for (int i = 0; i < nodes.size(); i++) {
                if (code.equals(nodes.get(i).getCode()))
                    return nodes.get(i);
            }
            return null;
        }

        @Override
        public INode findByRenderer(String renderer) {
            for (int i = 0; i < nodes.size(); i++) {
                if (renderer.equals(nodes.get(i).getRenderer()))
                    return nodes.get(i);
            }
            return null;
        }

        @Override
        public int count() {
            return nodes.size();
        }
    }

Ostatnie zdanie mówi o implementacji interfejsu ICompositeNode. Nie rozumiem jak miałoby to wyglądać. Mam coś takiego:

public class MyStructure implements IMyStructure,ICompositeNode  {
        private List<INode> nodes;

        @Override
        public INode findByCode(String code) {


            for (int i = 0; i < nodes.size(); i++) {
                if (code.equals(nodes.get(i).getCode()))
                    return nodes.get(i);
            }
            return null;
        }

        @Override
        public INode findByRenderer(String renderer) {
            for (int i = 0; i < nodes.size(); i++) {
                if (renderer.equals(nodes.get(i).getRenderer()))
                    return nodes.get(i);
            }
            return null;
        }

        @Override
        public int count() {
            return nodes.size();
        }


        @Override
        public String getCode() {
            return null;
        }

        @Override
        public String getRenderer() {
            return null;
        }

        @Override
        public List<INode> getNodes() {
            return nodes;
        }
    }

Muszę zaimplementować metody z interfejsu, ale nie wiem w jaki sposób mają działać w tym przypadku metody getCode() czy getRenderer(). Nie wiem też czy pozostałe implementacje są poprawne.

Może ktoś zerknąć fachowym okiem?

Dzięki z góry

1 odpowiedź

0 głosów
odpowiedź 10 października 2019 przez mbabane Szeryf (79,260 p.)

Trochę to przypomina wzorzec kompozyt. Być może trzeba wziąć pod uwagę, że skoro ICompositeNode jest także INode to do listy w klasie MyStructure może trafić obiekt typu ICompositeNode.

Podobne pytania

0 głosów
1 odpowiedź 271 wizyt
pytanie zadane 13 sierpnia 2020 w Java przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 363 wizyt
0 głosów
1 odpowiedź 435 wizyt
pytanie zadane 17 grudnia 2019 w Nasze projekty przez cSharpKazik Użytkownik (840 p.)

93,395 zapytań

142,388 odpowiedzi

322,566 komentarzy

62,753 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...