Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 9589|Odpowiedź: 0

[JavaScript] Zdobądź dogłębną wiedzę o Javascrip{filter}t: meta-trybie wzorca projektowego

[Skopiuj link]
Opublikowano 30.07.2018 10:30:45 | | |
Wprowadzenie

Tryb flyweight skutecznie wspiera dużą liczbę drobnoziarnistych obiektów poprzez technologię współdzielenia, unikając narzutu związanego z dużą liczbą małych klas o tej samej zawartości (np. zużycie pamięci) oraz umożliwiając wszystkim współdzielenie klasy (meta-klasy).

W programowaniu czasem konieczne jest wygenerowanie dużej liczby drobnoziarnistych instancji klas do reprezentacji danych, a jeśli uda się zauważyć, że te instancje mają zasadniczo taki sam narzut z wyjątkiem kilku parametrów, liczba klas wymagających instancji może znacznie ograniczyć. Jeśli możesz przenieść te parametry poza instancję klasy i przekazać je w momencie wywołania metody, możesz znacznie zmniejszyć liczbę poszczególnych instancji poprzez udostępnianie.

A co z tego, że zastosujesz tryb meta w JavaScript? Istnieją dwa sposoby, pierwszy jest stosowany do warstwy danych, głównie do dużej liczby podobnych obiektów w pamięci; Druga jest stosowana do warstwy DOM, którą można używać w centralnym menedżerze zdarzeń, aby uniknąć przypisywania uchwytów zdarzeń do każdego elementu potomnego w kontenerze nadrzędnym.

Ciesz się metawersum i warstwami danych

W Flyweight istnieją dwie ważne koncepcje – stan wewnętrzny wewnętrzny i zewnętrzny zewnętrzny, stan wewnętrzny jest zarządzany w obiekcie metodami wewnętrznymi, a informacje zewnętrzne mogą być usuwane lub zapisywane zewnętrznie.

Mówiąc wprost, najpierw trzeba przyłapać oryginalny model, a potem przy różnych okazjach i środowiskach, a następnie produkować konkretne modele o własnych cechach, oczywiście tutaj trzeba generować nowe obiekty, więc tryb fabryczny często pojawia się w trybie Flyweight, wewnętrzny stan Flyweight służy do udostępniania, a fabryka Flyweight odpowiada za utrzymanie puli Flyweight (puli wzorców) do przechowywania obiektów stanu wewnętrznego.

Użyj trybu Yuanyuan

Pokażmy, że gdybyśmy mieli bibliotekę zarządzającą wszystkimi książkami, metadane każdej książki wyglądałyby wstępnie tak:

ID
Tytuł
Autor
Gatunek
Liczba stron
ID wydawcy
ISBN

Musimy także określić, kiedy i przez kogo każda książka została wypożyczona, a także datę zwrotu i dostępność:

data wydawnienia
checkoutMember
terminZwrotuDaty
Dostępność

Ponieważ obiekt książki jest ustawiony na następujący kod, należy zauważyć, że kod nie został jeszcze zoptymalizowany:


Program może być na początku w porządku, ale z czasem liczba książek może rosnąć w dużych ilościach, a każda książka ma inną wersję i ilość, a system staje się coraz wolniejszy. Tysiące obiektów książek w pamięci można sobie wyobrazić i musimy je zoptymalizować w trybie udostępniania.

Dane możemy podzielić na dwa typy: wewnętrzne i zewnętrzne, a dane związane z obiektem książki (tytuł, autor itp.) można przypisać atrybutom wewnętrznym, natomiast (checkoutMember, dueReturnDate itd.) można przypisać atrybutom zewnętrznym. W ten sposób poniższy kod może dzielić ten sam obiekt w tej samej książce, ponieważ niezależnie od tego, kto ją pożycza, dopóki książka jest tą samą książką, podstawowe informacje pozostają takie same:



Zdefiniuj podstawową fabrykę

Zdefiniujmy podstawową fabrykę, aby sprawdzić, czy obiekt książki został wcześniej utworzony, zwróć, jeśli tak, a jeśli nie, odtworzyć i przechować, co zapewnia, że tworzymy obiekt tylko dla każdego typu książki:



Zarządzanie statusem zewnętrznym


Stan zewnętrzny jest stosunkowo prosty, poza książką, którą zapakowaliśmy, wszystko inne trzeba tu zarządzać:



W ten sposób możemy zapisać te same informacje z tej samej książki w obiekcie bookmanagera i tylko jedną kopię; W porównaniu z poprzednim kodem można zauważyć, że oszczędza się dużo pamięci.

Ciesz się trybem meta i DOM


Nie powiem tu wiele o incydencie z bąbelkami DOM, wierzę, że wszyscy już wiedzą, podam dwa przykłady.

Przykład 1: Scentralizowane zarządzanie incydentami
Na przykład, jeśli mamy wiele podobnych typów elementów lub struktur (takich jak menu lub wiele li w ul), które muszą monitorować zdarzenie kliknięcia, to musimy przypisać każdy kolejny element do powiązania zdarzeń; jeśli jest ich bardzo, bardzo dużo, można sobie wyobrazić wydajność, a w połączeniu z wiedzą o bąbelkaniu, jeśli jakiś element potomny ma wyzwalanie zdarzenia, to zdarzenie przejdzie do wyższego elementu po wyzwalaniu, więc korzystając z tej funkcji, możemy użyć trybu Xiangyuan. Możemy monitorować zdarzenia elementów nadrzędnych tych podobnych elementów, a następnie określić, który element potomny ma wywołane zdarzenie, zanim przejdziemy do dalszych operacji.

Tutaj połączymy metody bind/unbind w jQuery jako przykład.

HTML:



JavaScript:



Przykład 2: Zastosowanie trybu Xiangyuan, aby poprawić wydajność

Inny przykład, nadal związany z jQuery, zazwyczaj używamy elementu obiektu w funkcji callback zdarzenia, często używamy formy $(this), która wielokrotnie tworzy nowy obiekt, ponieważ w funkcji callback jest już elementem DOM, musimy użyć następującego kodu:



W rzeczywistości, jeśli musimy użyć czegoś takiego jak $(this), możemy również zaimplementować własną wersję wzorca pojedynczej instancji, na przykład możemy zaimplementować funkcję taką jak jQuery.signle(this), aby zwrócić sam element DOM:



Jak użyć:



Zwraca to element DOM w stanie takim, jakim jest, bez tworzenia obiektu jQuery.

streszczenie


Tryb flyweight to tryb, który poprawia efektywność i wydajność programu, co znacznie przyspiesza jego bieg. Istnieje wiele zastosowań: na przykład, jeśli chcesz odczytać serię ciągów z bazy danych, z których wiele to duplikaty, możemy przechowywać te ciągi w puli Flyweight.

Jeśli aplikacja używa dużej liczby obiektów, a te duże obiekty powodują dużą satysfakcję pamięci, powinna rozważyć użycie trybu współdzielenia; Jeśli usuniesz zewnętrzny stan obiektu, możesz zastąpić wiele grup obiektów stosunkowo niewielką liczbą współdzielonych obiektów i rozważyć użycie trybu Xiangyuan.

Adres referencyjny:http://www.addyosmani.com/resour ... ok/#detailflyweight





Poprzedni:Polecam 3 strony internetowe z ikonami ikon
Następny:LiczbaOczekujących wiadomości, wiadomości w kolejce, wiadomości...
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com