Sobes.tech
Middle

Mis on disainimustrid?

sobes.tech AI

Vastus AI-lt

Disainimallid (patternid) on standardiseeritud, korduvalt kontrollitud lahendused sageli esinevatele disainiprobleemidele objektorienteeritud programmeerimise raames. Need ei ole valmis kasutamiseks mõeldud teegid või raamistikud, vaid kontseptsioonid või "retseptid", mida saab kohandada konkreetsele ülesandele.

Mallid keskenduvad klasside ja objektide suhetele. Need jagunevad kolme põhikategooriasse:

  • Loomise (Creational): Mallid objektide loomiseks:
    • Factory Method (Tööstuslik meetod)
    • Abstract Factory (Abstraktne tehas)
    • Singleton (Üksik)
    • Builder (Ehitusvahend)
    • Prototype (Prototüüp)
  • Struktuursed (Structural): Mallid klasside ja objektide organiseerimiseks suuremates struktuurides:
    • Adapter (Adapter)
    • Bridge (Sild)
    • Composite (Komposiit)
    • Decorator (Dekoratiiv)
    • Facade (Fassaad)
    • Flyweight (Kaaluvaba)
    • Proxy (Esindaja)
  • Käitumuslikud (Behavioral): Mallid algoritmidele ja viisidele, kuidas klassid ja objektid omavahel suhtlevad:
    • Chain of Responsibility (Vastutuse ahel)
    • Command (Käsk)
    • Iterator (Iteraator)
    • Mediator (Vaheleseade)
    • Memento (Memento)
    • Observer (Jälgija)
    • State (Seisund)
    • Strategy (Strateegia)
    • Template Method (Mallimeetod)
    • Visitor (Külastaja)

Disainimallide kasutamine võimaldab luua paindlikumat, laiendatavamat ja hooldatavamat koodi, parandada selle loetavust ning lihtsustada koostööd projektis.

Näiteks garantiseerib Singleton muster, et klassil on ainult üks eksemplar ning pakub sellele globaalse juurdepääsu:

// Singleton näide Java-s
class Singleton {
    private static Singleton instance; // Ainuüks eksemplar

    private Singleton() {
        // Privaatne konstruktor uute eksemplaride loomise vältimiseks
    }

    public static Singleton getInstance() {
        if (instance == null) { // Eksemplari loomine esmakordsel kutsumisel
            instance = new Singleton();
        }
        return instance; // Ainuüks eksemplar
    }

    public void showMessage() {
        System.out.println("Tere Singletonist!");
    }
}