Sobes.tech
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.