Middle+
Koje zadatke ste rešavali koristeći šablone dizajna?
sobes.tech АИ
Одговор од АИ
Koristio sam različite šablone za poboljšanje strukture i održivosti koda:
Kreacioni:
- Singleton: Za kreiranje jedinstvenog primera objekata, na primer, menadžera konfiguracije ili bazena veza sa bazom podataka.
public final class ConfigManager { private static ConfigManager instance; private ConfigManager() {} // Privatni konstruktor public static synchronized ConfigManager getInstance() { if (instance == null) { instance = new ConfigManager(); } return instance; } } - Factory Method: Za kreiranje objekata sa određenim svojstvima bez eksplicitnog navođenja konkretnih klasa. Koristio se pri radu sa različitim tipovima parsera fajlova.
- Abstract Factory: Za kreiranje porodica povezanih ili zavisnih objekata bez navođenja njihovih konkretnih klasa. Koristio se za rad sa različitim tipovima izvora podataka (npr. fajlski sistem, baza podataka) i odgovarajućim objektima.
Strukturni:
- Adapter: Za prilagođavanje interfejsa jedne klase drugoj, koju klijent očekuje. Koristio se za integraciju spoljašnjih biblioteka sa nespojivim interfejsima.
public interface Target { void request(); } public class Adaptee { public void specificRequest() { System.out.println("Specifičan zahtev Adaptee-a"); } } public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } - Decorator: Za dinamičko dodavanje novih odgovornosti objektima bez menjanja njihove strukture. Koristio se za dodavanje funkcionalnosti za beleženje ili keširanje postojećim objektima.
- Composite: Za sastavljanje objekata u stablastu strukturu za predstavljanje hijerarhija "deo-ceo". Koristio se pri radu sa elementima korisničkog interfejsa ili strukturom fajlova.
Ponašajući:
- Observer: Za definisanje zavisnosti "jedan-prema-više" između objekata tako da, kada se promeni stanje jednog objekta, svi zavisni od njega budu obavešteni i automatski ažurirani. Koristio se za implementaciju sistema obaveštenja o događajima.
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: Za definisanje porodice algoritama, njihovo kapsuliranje i obezbeđivanje njihove zamene. Koristio se za izbor različitih strategija obrade podataka u zavisnosti od konteksta.
- Template Method: Za definisanje kostura algoritma u operaciji, odlaganjem definicije nekih koraka na podklase. Koristio se za standardizaciju procesa obrade zahteva.