algorytm.org

Pyłek (flyweight)



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Pyłek (flyweight)
Ocena użytkowników:***** / 25
SłabyŚwietny 
Wpisany przez Kamil Dworak, 22 grudnia 2010 10:32

Pyłek (ang. flyweight) - strukturalny wzorzec projektowy. Stosowany do tworzenia bardzo dużej liczby obiektów (niewiele się różniących lub identycznych), którymi to będziemy mogli zarządzać (sterować) w sposób jednolity. Wzorzec tworzy jedną jedyną instancje danego obiektu. Wszystko opiera się na współdziałaniu, polegającym na modyfikacji atrybutów tego obiektu (przekazujemy do niego tylko to co uległo zmianie). Efektem takiej pracy jest znaczne zmniejszenie zapotrzebowania naszej aplikacji na pamięć (zamiast całej masy podobnych, jak nie identycznych, obiektów, przechowujemy tylko jedna instancję). Jedyną wadą stosowania tego wzorca jest spadek wydajności aplikacji.

pyłek


  • tworzymy interfejs Posilek, który będzie implementowany przez klasę Pizza, z której to zostanie utworzona pojedyncza instancja,
  • implementujemy klasę modyfikującą obiekt, tj. klasę Zmiana. Dzięki niej będziemy sterować zachowaniem obiektu, przy pomocy klas dziedziczących (Sos, Ser),
  • klasy podrzędne dekorują metodę dawajNazwe() (oczywiście można by tutaj nadać jej całkowicie inne działanie, zamiast dekorowania),
  • w main`ie możemy już odpowiednio sterować naszym "posilkiem". Efekty widzimy na ekranie.




Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Kamil DworakC#Visual Studio 2008
.cs
.cs
***** / 11
Kamil DworakJava
.java
.java
***** / 9
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 22 grudnia 2010 10:35
Komentarze
photo
+1 # Szczepan 2015-12-05 02:35
Czy to się różni od wzorca dekorator ?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # badger 2016-06-02 11:32
Dekorator przypisujesz wszystkim obiektom klasy przy jej definiowaniu
Flywheight polega na tym że jeśli potrzebujesz dużą ilość obiektów mających sporo wspólnych danych, to wszystkie te wspólne dane wyodrębniasz do jednej instancji przekazywanej w runtime do nowo tworzonych obiektów w taki sposób że wszystkie dzielą tą samą instancję wspólnych danych, mając tylko dane unikalne dla nich samych. Pozwala to oszczędzić RAM zużywany przez powtarzające się dane, kosztem zwiększonego narzutu czasu na każde odwołanie do współdzielonych danych
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Mateusz Guziec 2018-07-13 12:27
Dekorator jest lepszą wersją dziedziczenia takiego statycznego, natomiast Flyweight jest wzorcem na tworzenie dużej ilości identycznych, podobnych obiektów. Zupełnie inne zastosowanie tego wzorca jest. Dekorator-em tworysz lepsza wersje Pizzy, natiomiast pyłkiem tworzysz w grach obiekty drzew których moze byc tysiące.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # Rafał Duda 2016-12-14 11:00
W dekoratorze masz klasę abstrakcyjną zamiast interfejsu Posiłek
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz