Proxy a Adapter

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

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?


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 1x, ostatnio: scibi92
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0

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.

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

Czyli w takim razie obiekt trzymający liste(obiektów konkretnego typu) i wykonujący dodatkowe operacje (czyli rozszerzający interface) jest adaptorem?


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 1x, ostatnio: scibi92
n0name_l
Nie cytuj posta jesli jest tuz nad twoim.
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0

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.

Kopiuj
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.

Kopiuj
class Foo

class FooDecorator(f: Foo) {
  def newMethod() // ...
}
edytowany 2x, ostatnio: n0name_l
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:14 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

Zdefiniuj "rozszerzający interfejs" chodzi o dodanie nowych metod do interfejsu (rozszerzenie) czy też zmiana zachowania (dekorator).


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
0

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.