objektorienterade designmönster förklaras med praktiska exempel
beteendemönster
denna typ av mönster handlar om kommunikationen mellan objekt. I de flesta fall reduceras beroendet mellan kommunicerande objekt genom dessa mönster vilket leder till bättre Programvarudesign.
Ansvarskedja
detta mönster skapar en kedja av mottagarobjekt för en förfrågan. Det undviker att koppla avsändaren av en begäran till mottagaren och ger flera objekt chansen att hantera begäran. Mottagande objekt är kopplade ihop., I exemplet nedan konstrueras en kedja av middleware-enheter. Begäran, som innehåller E-post och lösenord, vidarebefordras i kedjan. Nya element i kedjan kan enkelt läggas till.
kommando
i kommandomönstret används ett objekt för att kapsla in all information som behövs för att utföra en åtgärd eller utlösa en händelse vid en senare tidpunkt. Som visas nedan definierar Åtgärdenöppen åtgärden såväl som objektet som åtgärden utförs på., Mer information behövs inte och ett annat objekt, här menyn, kan utföra åtgärden.
tolk
tolkmönstret definierar en representation för ett språks grammatik och ger möjlighet att tolka meningar på det språket. I kodavsnittet under ett Plus-objekt kan tolka ”operand1 + operand2” och vet vad man ska göra med det uttrycket. Fler tolkar kan läggas till utan att ändra strukturen för mycket. Tolken använder sedan tolkar för att förstå inmatning.,
Iterator
Iteratorn används för att korsa en behållare med data för att komma åt behållarens element utan att behöva känna till den underliggande strukturen. Dessutom kan nya traversalvarianter läggas till utan att ändra objektets gränssnitt eller själva datastrukturen.
ChannelSurfer, som visas nedan, kan komma åt kanaler i följd. Objektet RemoteControl behöver inte bry sig om hur kanalerna är organiserade. En RandomChannelSurfer, till exempel, kan läggas till utan mycket problem.,
medlare
om två eller flera objekt behöver samarbeta kan Medlingsmönstret tillämpas. Speciellt om föremålen inte känner till varandra, om de inte ska vara tätt kopplade, eller deras interaktion är komplex, kan detta mönster hjälpa till.
i exemplet nedan finns det viss interaktion som behövs mellan gränssnittselement. Denna interaktion sker genom Autentiseringendialog som medlare. På så sätt definieras inte interaktionen i ett av de deltagande objekten, men extraheras i medlaren.,
Memento
Memento-mönstret är användbart om ett visst tillstånd av ett objekt ska sparas för senare användning. Därmed bryter det inte inkapslingen av objektets implementeringsdetaljer. Det kan till exempel användas för genomförandet av en ångra-mekanism.
Observer
i observer pattern observer-objekten prenumererar på ett observerbart objekt som ska anmälas varje gång observerbara ändrar sina data., Observatörer är löst kopplade och kan läggas till och tas bort vid körning.
när det gäller hur observatören äntligen får data från observerbara finns det två varianter: tryck och dra. Koden nedan visar pull-varianten, som är mer flexibel, eftersom den observerbara i detta fall inte behöver veta hur observatören vill ta emot data, men observatören kan hämta data som önskat.
tillstånd
Statsmönstret låter ett objekt ändra sitt beteende när dess interna tillstånd ändras., Detta mönster liknar strategimönstret, men i det här fallet bestäms internt hur objekten beter sig. Detta är särskilt användbart om komplexa förhållanden definierar hur objektet ska bete sig. Nya stater kan läggas till oberoende av befintliga stater.
strategi
i samband med Strategimönstret finns det flera varianter för en algoritm där en variant väljs för körning.,
i exemplet nedan kan ett Kompressorobjekt användas med en av två olika algoritmer definierade vid körning. Metoden som utför åtgärden (createArchive) tillämpar sedan den valda algoritmen.
Mall
Mallmönstret definierar en struktur för underklasser där steg i en algoritm och deras ordning definieras. Detta säkerställer att underklasserna följer exakt samma steg, vilket ger bättre överblick och konsekvens., Det gör det också möjligt att definiera standardimplementeringar för steg som kan åsidosättas av underklasser.
som visas nedan följer alla parsers som ärver från DataParser exakt samma steg när parse() exekveras. Detta säkerställer till exempel att alla parsers stänger filerna och loggar statusen.
besökare
Besökarmönstret gör det möjligt att tillämpa en eller flera operationer på en uppsättning objekt vid körning utan att ha operationerna tätt kopplade till objektstrukturen.,
Detta låter dig implementera dubbel leverans där en funktion samtal till olika konkreta funktioner är beroende på körtid typ av två objekt. I exemplet nedan å ena sidan finns rutelement och å andra sidan besökarobjekt som var och en utför olika funktioner på rutelementen. Om fler besökare läggs till i framtiden behöver inte rutelementet ändras.