Sobes.tech
Intern

DIP pavyzdys ```go package main import "fmt" // Sąsaja duomenų saugojimo abstrakcijai type DataStorage interface { Save(data string) } // Žemo lygio modulis duomenų saugojimui faile ```

sobes.tech AI

Atsakymas iš AI

Tęsiame su pavyzdžiu, kaip įgyvendinti priklausomybių inversijos principą (DIP) Go kalboje.

package main

import "fmt"

// Interfeisas duomenų saugojimo abstrakcijai
// type DataStorage interface {
//     Save(data string)
// }

// Žemo lygio modulis duomenų saugojimui faile
type FileStorage struct {
    filename string
}

func (fs *FileStorage) Save(data string) {
    // Čia galėtų būti rašymo į failą logika
    fmt.Printf("Saugoju duomenis '%s' į failą %s\n", data, fs.filename)
}

// Aukšto lygio modulis, kuris priklauso nuo abstrakcijos, o ne nuo konkrečios įgyvendinimo
type DataProcessor struct {
    storage DataStorage
}

func (dp *DataProcessor) Process(data string) {
    // Duomenų apdorojimas
    processedData := data + "_processed"
    dp.storage.Save(processedData)
}

func main() {
    fileStorage := &FileStorage{filename: "data.txt"}
    processor := &DataProcessor{storage: fileStorage}

    processor.Process("pavyzdiniai duomenys")
}

Čia, DataProcessor priklauso nuo DataStorage sąsajos, o ne nuo konkrečios FileStorage įgyvendinimo. Tai leidžia lengvai keisti duomenų saugojimo būdą, nekeičiant apdorojimo logikos.