Sobes.tech
Middle

Можете ли да ми кажете о образцу који сте користили у свом коду или производу?

sobes.tech АИ

Одговор од АИ

Radio sam sa uzorkom "Fabrika", posebno pri implementaciji usluge za obradu različitih tipova ulaznih zahteva.

// Interfejs za rukovaoce zahtevima
type RequestHandler interface {
	Handle(requestData string) (string, error)
}

// Konkretniji rukovalac tipa A
type TypeAHandler struct{}

func (h *TypeAHandler) Handle(requestData string) (string, error) {
	// Logika obrade za tip A
	return "Obrađeno Tip A: " + requestData, nil
}

// Konkretniji rukovalac tipa B
type TypeBHandler struct{}

func (h *TypeBHandler) Handle(requestData string) (string, error) {
	// Logika obrade za tip B
	return "Obrađeno Tip B: " + requestData, nil
}

// Fabrika za kreiranje rukovalaca
func CreateHandler(requestType string) (RequestHandler, error) {
	switch requestType {
	case "type_a":
		return &TypeAHandler{}, nil
	case "type_b":
		return &TypeBHandler{}, nil
	default:
		return nil, fmt.Errorf("nepoznat tip zahteva: %s", requestType)
	}
}

// Primer upotrebe
func main() {
	handlerA, err := CreateHandler("type_a")
	if err != nil {
		log.Fatal(err)
	}
	resultA, _ := handlerA.Handle("neki podaci za A")
	fmt.Println(resultA)

	handlerB, err := CreateHandler("type_b")
	if err != nil {
		log.Fatal(err)
	}
	resultB, _ := handlerB.Handle("neki podaci za B")
	fmt.Println(resultB)
}

Model "Fabrika" je omogućio enkapsulaciju logike kreiranja objekata u posebnu funkciju, što je pojednostavilo upravljanje zavisnostima i dodalo fleksibilnost. Kada je potrebno dodati novi tip zahteva, dovoljno je implementirati novi RequestHandler i dodati ga u fabriku, bez izmene koda koji koristi rukovaoce.