• 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

VPS Starter Arubacloud
0 głosów
1,135 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,280 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ź 181 wizyt
pytanie zadane 13 sierpnia 2020 w Java przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 276 wizyt
0 głosów
1 odpowiedź 335 wizyt
pytanie zadane 17 grudnia 2019 w Nasze projekty przez cSharpKazik Użytkownik (840 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...