Middle+
Milyen feladatokat oldott meg tervezési minták segítségével?
sobes.tech MI
Válasz az MI-től
Különböző mintákat alkalmaztam a kód szerkezetének és karbantarthatóságának javítása érdekében:
Létrehozó minták:
- Singleton: Egyetlen példány létrehozására, például konfigurációkezelő vagy kapcsolatmedence esetén.
public final class ConfigManager { private static ConfigManager instance; private ConfigManager() {} // Privát konstruktor public static synchronized ConfigManager getInstance() { if (instance == null) { instance = new ConfigManager(); } return instance; } } - Factory Method: Objektumok létrehozása meghatározott tulajdonságokkal anélkül, hogy konkrét osztályokat kellene megadni. Fájlparsers különböző típusainál használtam.
- Abstract Factory: Kapcsolódó vagy függő objektumcsaládok létrehozása anélkül, hogy meg kellene határozni azok konkrét osztályait. Különböző adatforrások (pl. fájlrendszer, adatbázis) és azokhoz tartozó objektumok kezelésére.
Strukturális minták:
- Adapter: Egy osztály interfészének alkalmazása egy másikhoz, amit a kliens elvár. Harmadik fél könyvtárak inkompatibilis interfészeinek integrálására.
public interface Target { void request(); } public class Adaptee { public void specificRequest() { System.out.println("Adaptee speciális kérése"); } } public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } - Decorator: Dinamikusan új feladatokat adhatunk hozzá objektumokhoz anélkül, hogy megváltoztatnánk azok szerkezetét. Naplózás vagy cache funkciók hozzáadására.
- Composite: Objektumok összefűzése fához hasonló struktúrákban, hierarchiák "rész-egész" megjelenítéséhez. Felhasználói felület elemek vagy fájlstruktúrák kezelésére.
Viselkedési minták:
- Observer: Egy-az-többhöz függőség meghatározása, ahol egy változás esetén minden érintett automatikusan frissül. Eseményértesítési rendszerhez.
import java.util.ArrayList; import java.util.List; public class Subject { private List<Observer> observers = new ArrayList<>(); private int state; public void attach(Observer observer) { observers.add(observer); } public void setState(int state) { this.state = state; notifyObservers(); } private void notifyObservers() { for (Observer observer : observers) { observer.update(); } } } public interface Observer { void update(); } - Strategy: Algoritmus családok meghatározása, azok kapszulázása és cserélhetőségük biztosítása. Különböző adatfeldolgozási stratégiák kiválasztására.
- Template Method: Az algoritmus vázának meghatározása, bizonyos lépések késleltetése alosztályokra. Kérésfeldolgozási folyamat standardizálására.