Sobes.tech
Middle+

Kokias užduotis sprendėte naudodami projektavimo šablonus?

sobes.tech AI

Atsakymas iš AI

Naudojant įvairius modelius siekiant pagerinti kodo struktūrą ir palaikymą:

Kuriamieji:

  • Singleton: Vieno objekto sukūrimas, pavyzdžiui, konfigūracijos tvarkyklė arba duomenų bazės jungčių baseinas.
    public final class ConfigManager {
        private static ConfigManager instance;
        private ConfigManager() {} //Privatus konstruktorius
        public static synchronized ConfigManager getInstance() {
            if (instance == null) {
                instance = new ConfigManager();
            }
            return instance;
        }
    }
    
  • Factory Method: Objektų kūrimas su tam tikromis savybėmis be konkrečių klasių nurodymo. Naudota dirbant su skirtingų tipų failų parseriais.
  • Abstract Factory: Susijusių arba priklausomų objektų šeimų kūrimas be jų konkrečių klasių nurodymo. Naudota dirbant su skirtingų duomenų šaltinių tipais (pvz., failų sistema, duomenų bazė) ir atitinkamais objektais.

Struktūriniai:

  • Adapter: Vieno klases sąsajos pritaikymas kitai, kurios klientas tikisi. Naudota trečiųjų šalių bibliotekų integracijai su nesuderinamomis sąsajomis.
    public interface Target {
        void request();
    }
    
    public class Adaptee {
        public void specificRequest() {
            System.out.println("Adaptee's specific request");
        }
    }
    
    public class Adapter implements Target {
        private Adaptee adaptee;
    
        public Adapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        @Override
        public void request() {
            adaptee.specificRequest();
        }
    }
    
  • Decorator: Dinamiškai pridedant naujas atsakomybės objektams be jų struktūros keitimo. Naudota žurnalavimo ar talpyklos funkcijų pridėjimui prie esamų objektų.
  • Composite: Objektų sujungimas į medžio struktūras, kad būtų galima atvaizduoti "dalis-visas" hierarchijas. Naudota vartotojo sąsajos elementų arba failų struktūros valdyme.

Elgsenos:

  • Observer: Priklausomybės apibrėžimas "vienas-keli" tarp objektų, kad vieno objekto būsenos pasikeitimas automatiškai praneštų ir atnaujintų priklausomus. Naudota įvykių pranešimų sistemai.
    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: Algoritmų šeimų apibrėžimas, kiekvieno jų inkapsuliavimas ir jų keičiamumas. Naudota duomenų apdorojimo strategijų pasirinkimui priklausomai nuo konteksto.
  • Template Method: Algoritmo skeletą operacijoje apibrėžti, atidėliojant kai kurių žingsnių apibrėžimą paveldėtojams. Naudota užklausų apdorojimo proceso standartizacijai.