Middle+
Jakie zadania rozwiązałeś za pomocą wzorców projektowych?
sobes.tech AI
Odpowiedź od AI
Stosował różne wzorce, aby poprawić strukturę i utrzymanie kodu:
Kreacyjne:
- Singleton: Do tworzenia pojedynczej instancji obiektów, na przykład menedżera konfiguracji lub puli połączeń z bazą danych.
public final class ConfigManager { private static ConfigManager instance; private ConfigManager() {} // Prywatny konstruktor public static synchronized ConfigManager getInstance() { if (instance == null) { instance = new ConfigManager(); } return instance; } } - Factory Method: Do tworzenia obiektów z określonymi właściwościami bez jawnego wskazywania konkretnych klas. Używany przy pracy z różnymi typami parserów plików.
- Abstract Factory: Do tworzenia rodzin powiązanych lub zależnych obiektów bez wskazywania ich konkretnych klas. Stosowany przy pracy z różnymi typami źródeł danych (np. system plików, baza danych) i odpowiadającymi im obiektami.
Strukturalne:
- Adapter: Do dostosowania interfejsu jednej klasy do innego, którego oczekuje klient. Używany do integracji bibliotek zewnętrznych z niekompatybilnymi interfejsami.
public interface Target { void request(); } public class Adaptee { public void specificRequest() { System.out.println("Specyficzne żądanie Adaptee"); } } public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } - Decorator: Do dynamicznego dodawania nowych obowiązków obiektom bez zmiany ich struktury. Używany do dodawania funkcjonalności logowania lub buforowania do istniejących obiektów.
- Composite: Do łączenia obiektów w struktury drzewiaste w celu reprezentowania hierarchii "część-całość". Używany przy pracy z elementami interfejsu użytkownika lub strukturą plików.
Behawioralne:
- Observer: Do definiowania zależności "jeden-do-wielu" między obiektami tak, że gdy zmienia się stan jednego, wszystkie zależne są powiadamiane i automatycznie aktualizowane. Używany do implementacji systemów powiadomień o zdarzeniach.
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: Do definiowania rodzin algorytmów, kapsułkując każdy z nich i zapewniając ich wymienność. Używany do wyboru różnych strategii przetwarzania danych w zależności od kontekstu.
- Template Method: Do definiowania szkieletu algorytmu w operacji, pozostawiając niektóre kroki do zdefiniowania przez podklasy. Używany do standaryzacji procesu obsługi żądań.