„Tervezési minták (Sznikák)” változatai közötti eltérés

Kavics (vitalap | szerkesztései)
Nincs szerkesztési összefoglaló
Kavics (vitalap | szerkesztései)
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
* objektumok hozzáadása és elvétele futási időben
Új, változó struktúrájú objektumok létrehozása
* új, változó struktúrájú objektumok létrehozása
Redukált származtatás, kevesebb alosztály
* 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 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)
* 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 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ó 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 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
* 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ó
* 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
* 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