Megfigyelő programtervezési minta

Az Observer, vagy Megfigyelő minta egy olyan szoftvertervezési minta, melyben egy objektum, melyet alanynak hívunk, listát vezet alárendeltjeiről, akiket megfigyelőknek hívunk és automatikusan értesíti őket bármilyen állapotváltozásról, többnyire valamely metódusuk meghívásán keresztül. Többnyire elosztott eseménykezelő rendszerek kialakításakor használjuk. A Megfigyelő minta kulcsfontosságú része az ismert Model-View-Controller (MVC, Modell-Nézet-Vezérlő) architekturális modellnek. A Megfigyelő mintát számos programozási könyvtár és rendszer alkalmazza, többek között szinte minden GUI toolkit.

A Megfigyelő minta memóriaszivárgást okozhat, melyet elévülő hallgató problémaként is ismerhetünk, mivel az alap implementáció során explicit regisztrációt és explicit deregisztrációt is végrehajtunk, mint a megsemmisítési mintában, mivel az alany erősen kötődik a megfigyelőkhöz, hogy azok aktívak maradjanak. Ezt megelőzhetjük, ha az alanyok csak gyengén kötődnek a megfigyelőkhöz.

Kapcsolódó minták: Közvetítő, Egyke, fel- és leiratkozás.

Kapcsolódás

A megfigyelőt gyakran úgy implementálják, hogy az alany annak az objektumnak a része, aminek az állapotát megfigyelik, és ha szükséges, akkor értesítse a változásról a megfigyelőket. Ez szoros csatolást eredményez, így az alany és a megfigyelők tudnak egymásról, és ami még rosszabb, turkálhatnak egymásban. Ez rontja a sebességet, a skálázhatóságot, a karbantarthatóságot, a biztonságot és a rugalmasságot.[1][2]

Egy másik megvalósítási mód a fel- és leiratkozási minta, ahol üzenetekkel kommunikálnak. Ez tartalmaz egy üzenetsor szervert és egy üzenetkezelőt is. Ez lehetővé teszi, hogy a megfigyelők és az alanyok lazábban kapcsolódjanak, és még csak ne ismerjék egymást, hiszen a üzenetszerver közvetít közöttük. De a fel- és leiratkozás minta máshogy is használható, amivel jelek és értesítések küldhetők; ezzel hasonló eredmény érhető el, a megfigyelő minta használata nélkül.[1][2] Azonban a korai ablakozó rendszerekben még nem különült el a két minta, és szinomimaként használták.[3]

A megfigyelő minta Gammáék könyvében nagyon le van egyszerűsítve. Nem foglalkozik azzal a logikával, amit az alany az üzenet küldése előtt vagy után végez. Nem törődik az üzenetek felhasználásával vagy feljegyzésével. Ezeket rendszerint az üzenetküldő rendszer végzi, aminek a megfigyelő minta a része.

Szerkezet

A Megfigyelő minta UML ábrája

Példa

Az alábbi Java példa billentyűzetparancsokat fogad inputként és minden ilyen input sort külön eseményként kezel. A példa a java.util.Observer és a java.util.Observable könyvtárcsoportra épül. Amikor a System.in stringet ad, meghívódik a notifyObservers metódus, mely értesíti a megfigyelőket egy esemény bekövetkeztéről azáltal, hogy meghívja azok ’update’ metódusát, melyet jelen esetben a lambda függvény reprezentál.

import java.util.Observable;
import java.util.Scanner;
 
class EventSource extends Observable implements Runnable {
    public void run() {
        while (true) {
            String response = new Scanner(System.in).next();
            setChanged();
            notifyObservers(response);
        }
    }
}
import java.util.Observable;
import static java.lang.System.out;
 
class MyApp {
    public static void main(String[] args) {
        out.println("Enter Text >");
        EventSource eventSource = new EventSource();
 
        eventSource.addObserver((Observable obj, Object arg) -> { 
            out.println("\nReceived response: " + arg);
        });
 
        new Thread(eventSource).start();
    }
}

Hasonló példa Python-ban:

class Observable:
    def __init__(self):
        self.__observers = []
 
    def register_observer(self, observer):
        self.__observers.append(observer)
 
    def notify_observers(self, *args, **kwargs):
        for observer in self.__observers:
            observer.notify(self, *args, **kwargs)
 
 
class Observer:
    def __init__(self, observable):
        observable.register_observer(self)
 
    def notify(self, observable, *args, **kwargs):
        print('Got', args, kwargs, 'From', observable)
 
subject = Observable()
observer = Observer(subject)
subject.notify_observers('test')

Jegyzetek

  1. a b Comparison between different observer pattern implementations Moshe Bindler, 2015 (Github)
  2. a b Differences between pub/sub and observer pattern The Observer Pattern by Adi Osmani (Safari books online)
  3. The Windows Programming Experience Charles Petzold, Nov 10, 1992, PC Magazine (Google Books)

Kapcsolódó szócikkek

Read other articles:

Untuk tempat lain yang bernama sama, lihat Sekayu. SekayuKelurahanKantor Kelurahan SekayuNegara IndonesiaProvinsiJawa TengahKotaSemarangKecamatanSemarang TengahKodepos50132Kode Kemendagri33.74.01.1007 Kode BPS3374130013 Luas0,58 km²Jumlah penduduk-Kepadatan- Sekayu merupakan sebuah kelurahan di wilayah kecamatan Semarang Tengah, Kota Semarang, Provinsi Jawa Tengah. Karang Taruna Himalaya merupakan organisasi pemerintahan yang berada di kelurahan Sekayu memiliki makna Hidup Makmur Latiha...

 

Republik FilipinaRepublikang PilipinoRepública Filipina1897–1901 Bendera Lambang Lagu kebangsaan: Himno Nacional Filipina Lokasi Filipina di AsiaStatusNegara yang tidak diakuiIbu kotaMalolos, Bulacan (Official) 23 Januari,[1] 1899-29 Maret 1899San Isidro, Nueva Ecija 29 Maret 1899-9 Mei 1899Palanan, Isabela 6 September 1900-23 Maret 1901Bahasa yang umum digunakanSpanyol (de facto) TagalogPemerintahanRepublikPresidente de la República • 1898-1901 Emilio Aguina...

 

DVD

Optical disc format This article is about the disc format in general. For the video recording format based upon DVD, see DVD-Video. For the audio storage format also based upon DVD, see DVD-Audio. For other uses, see DVD (disambiguation). MMCD redirects here. For Sony's proprietary CD-ROM XA-based multimedia software format, see Sony Multimedia CD-ROM Player. DVDThe data side of a DVDmanufactured by Sony DADCMedia typeOptical discEncodingDVD-ROM and DVD-R(W) use one encoding, DVD-RAM and DVD+...

سي إن إن   معلومات عامة الشعار (بالإنجليزية: Go There)‏(بالإنجليزية: This is CNN)‏(بالإنجليزية: More People Get Their News from CNN From Any Other Source)‏(بالإنجليزية: The World's Most Trusted Name in News)‏(بالإنجليزية: The Most Trusted Name in News)‏(بالإنجليزية: The Worldwide Leader in News)‏(بالإنجليزية: Facts First)‏(بالإنجليزية: Reporting From Around the Wo...

 

27th running of the Indianapolis 500 27th Indianapolis 500Indianapolis Motor SpeedwayIndianapolis 500Sanctioning bodyAAADateMay 30, 1939WinnerWilbur ShawWinning EntrantBoyle Racing HeadquartersAverage speed115.035 mph (185.131 km/h)Pole positionJimmy SnyderPole speed130.138 mph (209.437 km/h)Most laps ledLouis Meyer (79)Pre-racePace carBuick Roadmaster 80Pace car driverCharles ChayneStarterSeth Klein[1]Honorary refereePaul G. Hoffman[1]Estimated attendance1...

 

Ancient Egyptian deity Not to be confused with Nut (goddess). For the town in Armenia, see Hunut. UnutUnut depicted with the head of a lioness, Louvre MuseumName in hieroglyphs Major cult centerHermopolisSymbolHareConsortWenenu Unut, also known as Wenut or Wenet, was a prehistoric Ancient Egyptian hare and snake goddess of fertility and new birth.[1] Known as The swift one, the animal sacred to her was the hare, but originally, she had the form of a snake. She came from the fifteenth ...

13th-generation smartphone produced by Apple Inc. iPhone 11iPhone 11 in WhiteBrandApple Inc.Manufacturer Foxconn (on contract) SloganJust the right amount of everything.Generation13thCompatible networks2G / 3G / 4G LTEFirst releasedSeptember 20, 2019 (2019-09-20)Availability by region September 20, 2019 Australia Austria Belgium Canada China, Mainland Czech Republic Denmark Finland France Germany Hong Kong Ireland Italy Japan Mexico Netherlands New Zealand Norway Poland Portuga...

 

† Человек прямоходящий Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:Синапсиды�...

 

Me & My GirlsSingel promosi oleh Fifth Harmonydari album mini Better TogetherSisi-AMiss Movin' OnDirilis18 Juli 2013[1]Direkam2012-2013GenrePop remajaDurasi3:24Label Syco Epic Pencipta Allyson Brooke Karla Cabello Lauren Jauregui Normani Kordei Dinah Jane Hansen Julian Bunetta Patrick James Bianco Beau Alexandrè Dozier John Ryan Produser Bunetta Bianco Dozier Ilya Salmanzadeh Me & My Girls adalah lagu yang direkam oleh girl grup asal Amerika Serikat, Fifth Harmony dari album ...

2020年夏季奥林匹克运动会波兰代表團波兰国旗IOC編碼POLNOC波蘭奧林匹克委員會網站olimpijski.pl(英文)(波兰文)2020年夏季奥林匹克运动会(東京)2021年7月23日至8月8日(受2019冠状病毒病疫情影响推迟,但仍保留原定名称)運動員206參賽項目24个大项旗手开幕式:帕维尔·科热尼奥夫斯基(游泳)和马娅·沃什乔夫斯卡(自行车)[1]闭幕式:卡罗利娜·纳亚(皮划艇)&#...

 

Town in Cornwall, England For other uses, see Bude (disambiguation). Human settlement in EnglandBudeCornish: PorthbudBudeLocation within CornwallPopulation9,222 (2011 census)[1][2]OS grid referenceSS215065Civil parishBude-StrattonUnitary authorityCornwallCeremonial countyCornwallRegionSouth WestCountryEnglandSovereign stateUnited KingdomPost townBUDEPostcode districtEX23Dialling code01288PoliceDevon and CornwallFireCornwallAmbulanceSouth...

 

Confessional Baptist Association (CBA)AbbreviationCBAFormation1997 (1997)HeadquartersMansfield, TexasModeratorCorey SmithWebsitecba1689.comFormerly calledAssociation of Reformed Baptist Churches in America (ARBCA) Part of a series onBaptists Background Christianity Protestantism Puritanism Anabaptism Doctrine Baptist beliefs Confessions Believers' Church Priesthood of all believers Individual soul liberty Separation of church and state Sola scriptura Congregationalism Ordinances Offices...

هذه المقالة تحتاج للمزيد من الوصلات للمقالات الأخرى للمساعدة في ترابط مقالات الموسوعة. فضلًا ساعد في تحسين هذه المقالة بإضافة وصلات إلى المقالات المتعلقة بها الموجودة في النص الحالي. (أغسطس 2023) هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة �...

 

Epagneul and Épagneul redirect here. For breeds whose name contains épagneul, see pages such as Épagneul Français. Dog type For the Thoroughbred racehorse, see Spaniel (horse). For the American R&B doo-wop group from the 1950s, see The Spaniels. English Cocker Spaniels are small spaniels A Welsh Springer Spaniel on the beach A spaniel is a type of gun dog. Spaniels were especially bred to flush game out of denser brush. By the late 17th century, spaniels had been specialized into wate...

 

British order of chivalry established in 1818 This article is about the British order of chivalry. For other uses, see Order of Saint Michael (disambiguation) and Order of St. George (disambiguation). Most Distinguished Order of Saint Michael and Saint George Collar and badge of the Grand CrossAwarded by The monarch of the United Kingdom TypeOrder of chivalryEstablished28 April 1818MottoAuspicium Melioris Ævi(Latin for 'Token of a Better Age')EligibilityTypically British or Commonwea...

Philosophical interpretation of the axioms of probability This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Probability interpretations – news · newspapers · books · scholar · JSTOR (April 2011) (Learn how and when to remove this message) The word probability has been used in a variety of ways since it was fir...

 

Questa voce sull'argomento calciatori olandesi è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Nicky KuiperNazionalità Paesi Bassi Altezza182 cm Peso84 kg Calcio RuoloDifensore Termine carriera2019 CarrieraGiovanili ???? ESA2005 Vitesse2005-2008 Vitesse/AGOVV Voetbal Academie Squadre di club1 2008-2009 Vitesse15 (0)2009-2013 Twente26 (2)2013→  Panathīnaïkos3 (0)2013-2014�...

 

Thury-en-Valoiscomune Thury-en-Valois – Veduta LocalizzazioneStato Francia RegioneAlta Francia Dipartimento Oise ArrondissementSenlis CantoneNanteuil-le-Haudouin TerritorioCoordinate49°10′N 3°02′E49°10′N, 3°02′E (Thury-en-Valois) Altitudine64 e 142 m s.l.m. Superficie11,31 km² Abitanti477[1] (2009) Densità42,18 ab./km² Altre informazioniCod. postale60890 Fuso orarioUTC+1 Codice INSEE60637 CartografiaThury-en-Valois Sito istituzionaleModifica ...

Public school in the United StatesDrury High School1865 school buildingAddress1130 South Church StreetNorth Adams, Massachusetts 01247United StatesInformationTypePublicOpen enrollment[1]Established1843; 181 years ago (1843)StatusOpenSchool districtNorth Adams Public SchoolsSuperintendentBarbara MalkasPrincipalStephanie KopalaStaff49.93 (FTE)[2]Grades7–12Age12 to 18Enrollment493 (2022-23)[2]Student to teacher ratio9.87[2]LanguageEnglishCo...

 

Canadian poet (born 1943) Jane MunroMunro at the Eden Mills Writers' Festival in 2016Born (1943-12-03) December 3, 1943 (age 80)North Vancouver, British Columbia, CanadaNationalityCanadiansOccupationPoetWebsitejanemunro.com Jane Munro (born December 3, 1943) is a Canadian poet. She has published six collections of poetry, including Blue Sonoma, which won the 2015 Griffin Poetry Prize. Munro was born in North Vancouver, British Columbia in 1943 and raised in Vancouver and North Vancouver....