A Singleton minta a szoftvertervezési minták közé tartozik, amely azt a problémát oldja meg, hogy egy osztályból csak egyetlen példány létezhet, és erre a példányra bárhol a kódban hozzáférhetünk. Ez a minta különösen hasznos lehet globális állapotok kezelésére, vagy amikor egy erőforráson (például adatbázis-kapcsolaton vagy fájlrendszeren) keresztül való műveleteket kell koordinálni. PowerShellben a Singleton minta implementálása több módon is megvalósítható. A leggyakoribbak közé tartozik egy statikus változó vagy a $global: scope használata.

Statikus változó használata

A statikus változó használata egy közvetlen módja annak, hogy egy osztályból egy példányt hozzunk létre, és azt globálisan elérhetővé tegyük. PowerShellben ez kivitelezhető úgy, hogy definiálunk egy osztályt, amelyben egy statikus változót hozunk létre, amely magát az osztálypéldányt tárolja. Egy statikus getter metódus segítségével biztosítjuk, hogy ha még nem jött létre példány, akkor az osztály egy új példányát hozzuk létre és azt adjuk vissza. Ha már létrejött az osztály egy példánya, egyszerűen visszaadjuk ezt a példányt.

class Singleton {
    static [Singleton] $instance = $null

    static [Singleton] GetInstance() {
        if ([Singleton]::instance -eq $null) {
            [Singleton]::instance = [Singleton]::new()
        }
        return [Singleton]::instance
    }

    hidden [void]__construct() { }
}

$global: scope használata

A $global: scope használatával még egy módja van a Singleton minta megvalósításának PowerShellben. Ebben az esetben egy globális változót hozunk létre, amely tárolja az osztály példányát. Ez a módszer egyszerűbb, mint a statikus változóval való megoldás, viszont kevesebb a kontrollunk a példányosítás felett.

$global:SingletonInstance = $null

function Get-SingletonInstance {
    if ($null -eq $global:SingletonInstance) {
        $global:SingletonInstance = [Singleton]::new()
    }
    return $global:SingletonInstance
}

Mindkét megközelítésnek megvannak az előnyei és hátrányai. A statikus változó használatával nagyobb kontrollunk van a példányosítás felett, beleértve a konstruktor elrejtését is, ami megakadályozza az osztály további példányainak létrehozását. A $global: scope használatának előnye az egyszerűségében rejlik, viszont kevésbé “tiszta” megoldásnak tekinthető, és nehezebben kezelhető a globális állapotok miatt.

A Singleton minta célja, hogy biztosítsa egy osztályból csak egy objektum példány létezhet. A minta használatának előnyei közé tartozik, hogy kontroll alatt tarthatjuk az erőforrásokhoz való hozzáférési pontokat, és csökkenthetjük a nem szükséges példányosítások általi overheadet. PowerShellben ez kivitelezhető, szem előtt tartva a kódbázis karbantarthatóságát és a rendszer erőforrás-hatékonyságát. A Singleton minta alkalmazása lehetővé teszi, hogy egyedülállóan kezeljük azokat az objektumokat, amelyek globális hozzáférést igényelnek egy PowerShell környezetben, miközben minimalizáljuk a nem kívánt mellékhatások esélyét.

About The Author

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük