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.