Czym właściwie się rózni proxy od adaptera? Jeżeli np. mam klase która przechowuje prywatną liste pewnych obiektów i dodaje dodatkowe metody np. wyszukiwanie podlisty to jest adapter czy proxy?

- Rejestracja:ponad 12 lat
- Ostatnio:ponad 4 lata
- Postów:2412
W wielkim skrocie:
Adapter -> Jesli masz klase z jakims tam interfejsem i chcesz go w pewien sposob zmodyfikowac, lub zamapowac na inny interfejs.
Proxy -> Sluzy w gruncie rzeczy do dziwniejszych rzeczy. Przykladowo masz program, ktory musi w pewnych warunkach wykonac jakas akcja. Akcja ta jest kosztowna i Proxy sie uzywa do tego, aby opoznic wykonywanie tej akcji do czasu, gdy bedzie ona potrzebna, bo np. moze nie byc potrzebna w ogole (takie Lazy obiektowe). Innym przykladem moze byc na przyklad sytuacja, gdy chcesz ukryc to, ze klasa odwoluje sie do jakiegos zewnetrznego serwisu.
- Rejestracja:ponad 10 lat
- Ostatnio:6 miesięcy
- Lokalizacja:Warszawa
- Postów:3573
Czyli w takim razie obiekt trzymający liste(obiektów konkretnego typu) i wykonujący dodatkowe operacje (czyli rozszerzający interface) jest adaptorem?


- Rejestracja:ponad 12 lat
- Ostatnio:ponad 4 lata
- Postów:2412
Tak. W teorii mozna troche nagiac i podpiac to pod adapter. W praktyce takie cos jest nazywane dekoratorem.
W sumie to napisze to w inny sposob, zeby nie bylo niejasnosci:
Adapter jedyne co robi to adaptuje obiekt do jakiegos innego interfejsu, najczesciej to wyglada tak.
case object Foo
class SomeClass {
def getFooObject = Foo
}
trait FooProvider {
def getFoo: Foo
}
class Adapter(s: SomeClass) extends FooProvider {
override def getFoo: Foo =
s.getFooObject
}
To co ty robisz to pewnie dekorator, tj.
class Foo
class FooDecorator(f: Foo) {
def newMethod() // ...
}
adapter jak adapter służy do przystosowania czegoś do użycia w innym standardzie
tak jak masz adapter pozwalający na podłączenie urządzenia z angielską wtyczką do polskiego gniazdka tak samo adapterem w programowaniu nazywa się klasę przystosowującą pewną klasę do wykorzystania w klasie wymagającej innego interfejsu
to co opisujesz zapewne adapterem nie jest, choćby dlatego że piszesz o "liście elementów"
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.