8. gyakorlat¶
A gyakorlat anyaga¶
Visitor¶
-
Cél: objektum-hierarchián végezhető művelet reprezentálása az osztályok megváltoztatása nélkül
-
Alkalmazhatóság:
- több független műveletet kell elvégezni egy objektum-struktúrán (az osztályok "beszennyezése" nélkül)
- a struktúrát meghatározó osztályok ritkán változnak, új műveleteket viszont sűrűn definiálhatunk
Példa¶
-
Composite mintánál vizsgált könyvtárszerkezet példája
-
Van két műveletünk:
-
Fa-szerkezet listázás
- Könyvtárak és fájlok számának megszámolása
- Két különböző műveletet számoljuk ki két különböző visitorral!
VisitableResource.java¶
1 2 3 4 5 | |
FileSystemVisitor.java¶
1 2 3 4 5 6 7 8 9 10 | |
VisitableFile.java¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | |
VisitableFolder.java¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | |
TreePrinterVisitor.java¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
TypeCounterVisitor.java¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
Client.java¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
Gondolatok¶
-
visit(), visitEnd() -> template method?
-
generikus visit() metódus, ami általános objektumot vár az UML-en látottak helyett (egy absztrakt osztályban)
-
Java esetében reflection segítségével jó tud lenni
Feladatok¶
- Az alábbiakban megtalálható a MusicLibraryExercise.java fájl. Tanulmányozzuk, alakítsuk át úgy, hogy legyen benne tervezési minta. Jelenlegi gondok?!
- Minden műfajt egyesével szeretném kikérni (rap, classic, stb). Mindenre kéne egy getter? Egybemosódik az adatszerkezet és az algoritmusok.
- Mi van akkor, ha szeretnék rap és rock zenéket keresni? Egyesével, majd a halmazokat egyesítem? Írjak rá külön egy metódust? Sehogy sem túl jó jelenleg…
- Melyik minta lehet?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | |
Utolsó frissítés:
2021-11-17 11:01:33