„Tervezési minták (Sznikák)” változatai közötti eltérés
Nincs szerkesztési összefoglaló |
Nincs szerkesztési összefoglaló |
||
| 1. sor: | 1. sor: | ||
{{RightTOC}} | |||
Néhány fontosabb, gyakrabban használt tervezési minta: | Néhány fontosabb, gyakrabban használt tervezési minta: | ||
=== Creational === | === Creational === | ||
| 18. sor: | 19. sor: | ||
* '''Strategy''' | * '''Strategy''' | ||
* '''Command''' | * '''Command''' | ||
---- | |||
== Factory method == | == Factory method == | ||
| 31. sor: | 34. sor: | ||
* a rendszernek több termékcsaláddal kell együttműködnie | * a rendszernek több termékcsaláddal kell együttműködnie | ||
* a rendszernek szorosan összetartozó "termék" objektumok adott családjával kell dolgoznia, és ezt akarjuk kényszeríteni a rendszerben | * a rendszernek szorosan összetartozó "termék" objektumok adott családjával kell dolgoznia, és ezt akarjuk kényszeríteni a rendszerben | ||
'''Előnyök | '''Előnyök''' | ||
* Elszigeteli a konkrét osztályokat | * Elszigeteli a konkrét osztályokat | ||
* A termékcsaládokat könnyű kicserélni | * A termékcsaládokat könnyű kicserélni | ||
* Elősegíti a termékek közötti konzisztenciát | * Elősegíti a termékek közötti konzisztenciát | ||
'''Hátrányok | '''Hátrányok''' | ||
* Nehéz új termék hozzáadása. Ekkor az Abstract Factory egész hierarchiáját módosítani kell, mert az interfész rögzíti a létrehozható termékeket | * Nehéz új termék hozzáadása. Ekkor az Abstract Factory egész hierarchiáját módosítani kell, mert az interfész rögzíti a létrehozható termékeket | ||
* Megjegyzés: ezt bizonyos esetekben ki lehet kerülni | * Megjegyzés: ezt bizonyos esetekben ki lehet kerülni | ||
| 51. sor: | 54. sor: | ||
** globális hozzáférés a példányhoz | ** globális hozzáférés a példányhoz | ||
A Singleton konstruktora protected láthatóságú! Ez garantálja, hogy csak a statikus Instance metódushíváson keresztül lehessen példányt létrehozni. | A Singleton konstruktora protected láthatóságú! Ez garantálja, hogy csak a statikus Instance metódushíváson keresztül lehessen példányt létrehozni. | ||
Kód (C#): | '''Kód (C#):''' | ||
public class Singleton{ | public class Singleton{ | ||
| 67. sor: | 70. sor: | ||
public void Print() {...} | public void Print() {...} | ||
} | } | ||
Használata: | Használata: | ||
Singleton s1 = Singleton.Instance; | Singleton s1 = Singleton.Instance; | ||
Singleton.Instance.Print() | Singleton.Instance.Print() | ||
Prototype | == Prototype == | ||
Célja: a prototípus alapján új objektumpéldányok készítése | '''Célja:''' a prototípus alapján új objektumpéldányok készítése | ||
Példa: Grafikus keretrendszerre építve kottaszerkesztő alkalmazás elkészítése | '''Példa:''' Grafikus keretrendszerre építve kottaszerkesztő alkalmazás elkészítése | ||
Használjuk, ha | '''Használjuk, ha''' | ||
egy rendszernek függetlennek kell lennie a létrehozandó objektumok típusától | * egy rendszernek függetlennek kell lennie a létrehozandó objektumok típusától | ||
ha a példányosítandó osztályok futási időben határozhatók meg | * ha a példányosítandó osztályok futási időben határozhatók meg | ||
ha nem akarunk nagy párhuzamos osztályhierarchiákat | * ha nem akarunk nagy párhuzamos osztályhierarchiákat | ||
amikor az objektumok felparaméterezése körülményes, és könnyebb egy prototípust inicializálni majd azt másolni | * amikor az objektumok felparaméterezése körülményes, és könnyebb egy prototípust inicializálni majd azt másolni | ||
Minden objektum támogatja (Object osztály művelete): | Minden objektum támogatja (Object osztály művelete): | ||
protected Object MemberwiseClone() művelet (shallow copy) | * protected Object MemberwiseClone() művelet (shallow copy) | ||
Igazi, publikus, mély másolatot végző klónozáshoz implementálható az ICloneable interfész: | Igazi, publikus, mély másolatot végző klónozáshoz implementálható az ICloneable interfész: | ||
Object Clone() művelet (deep copy) | * Object Clone() művelet (deep copy) | ||
Előnyök | '''Előnyök''' | ||
* objektumok hozzáadása és elvétele futási időben | |||
* új, változó struktúrájú objektumok létrehozása | |||
* redukált származtatás, kevesebb alosztály | |||
Hátrányok | '''Hátrányok''' | ||
Minden egyes prototípusnak implementálnia kell a Clone() függvényt, ami igen bonyolult lehet | * Minden egyes prototípusnak implementálnia kell a Clone() függvényt, ami igen bonyolult lehet | ||
Adapter | == Adapter == | ||
Cél: Egy osztály interfészét olyan interfésszé konvertálja, amit a kliens vár. Lehetővé teszi olyan osztályok együttműködését, melyek egyébként az inkompatibilis interfészeik miatt nem tudnának együttműködni. | '''Cél:''' Egy osztály interfészét olyan interfésszé konvertálja, amit a kliens vár. Lehetővé teszi olyan osztályok együttműködését, melyek egyébként az inkompatibilis interfészeik miatt nem tudnának együttműködni. | ||
Példa: Grafikus editor | '''Példa:''' Grafikus editor | ||
Objektum kompozícióval, delegálással oldja meg az adaptálást | Objektum kompozícióval, delegálással oldja meg az adaptálást | ||
Szereplők: | '''Szereplők: ''' | ||
mint a Class Adapter-nél | * mint a Class Adapter-nél | ||
az Adapter tartalmaz egy pointert vagy referenciát az Adaptee-ra | * az Adapter tartalmaz egy pointert vagy referenciát az Adaptee-ra | ||
az adapter delegálja a művelet végrehajtását az Adaptee-ra | * az adapter delegálja a művelet végrehajtását az Adaptee-ra | ||
agy adapter képes több Adaptee-t is magában foglalni, beleértve azok alosztályait is | * agy adapter képes több Adaptee-t is magában foglalni, beleértve azok alosztályait is | ||
Használjuk, ha | '''Használjuk, ha ''' | ||
* egy olyan osztályt szeretnénk használni, amelynek interfésze nem megfelelő Adapter | |||
* egy újrafelhasználható osztályt szeretnénk készíteni, amely együttműködik előre nem látható vagy független szerkezetű osztályokkal (pluggable adapters) | |||
Bridge | == Bridge == | ||
Cél: Különválasztja az absztrakciót (interfészt) az implementációtól, hogy egymástól függetlenül lehessen �ket változtatni | '''Cél:''' Különválasztja az absztrakciót (interfészt) az implementációtól, hogy egymástól függetlenül lehessen �ket változtatni | ||
Példa: hordozható ablakozós rendszer XWindow és Presentation Manager alá | '''Példa:''' hordozható ablakozós rendszer XWindow és Presentation Manager alá | ||
Előnyei | '''Előnyei''' | ||
* az absztrakció és az implementáció különválasztása | |||
* az implementáció dinamikusan, akár futási időben is megváltoztatható | |||
* az implementációs részletek a klienstől teljesen elrejthetők | |||
* az implementációs hierarchia külön lefordított komponensbe tehető, így ha ez ritkán változik, nagy projektek esetén nagymértékben gyorsítható a fordítás/buildelés ideje | |||
* ugyanaz az implementációs objektum, több helyen is felhasználható | |||
Composite | == Composite == | ||
Célja: Rész-egész viszonyban álló objektumokat fastruktúrába rendezi. A kliensek számára lehetővé teszi, hogy az egyszerű és kompozit objektumokat egységesen kezelje. | '''Célja:''' Rész-egész viszonyban álló objektumokat fastruktúrába rendezi. A kliensek számára lehetővé teszi, hogy az egyszerű és kompozit objektumokat egységesen kezelje. | ||
Példa: Olyan grafikus alkalmazás, amely lehetővé teszi összetett grafikus objektumok létrehozását | '''Példa:''' Olyan grafikus alkalmazás, amely lehetővé teszi összetett grafikus objektumok létrehozását | ||
Használjuk, ha | '''Használjuk, ha ''' | ||
* objektumok rész-egész viszonyát szeretnénk kezelni | |||
A kliensek számára el akarjuk rejteni, hogy egy objektum egyedi objektum vagy kompozit objektum: bizonyos szempontból egységesen szeretnénk kezelni őket. | A kliensek számára el akarjuk rejteni, hogy egy objektum egyedi objektum vagy kompozit objektum: bizonyos szempontból egységesen szeretnénk kezelni őket. | ||
Decorator | Decorator | ||