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.