Heim > Java > javaLernprogramm > Strategiedesignmuster im Frühling

Strategiedesignmuster im Frühling

Patricia Arquette
Freigeben: 2024-10-21 20:09:03
Original
278 Leute haben es durchsucht

Strategy Design Pattern in Spring

In Unternehmensanwendungen werden wir unterschiedliche Implementierungen entsprechend unseren Geschäftsanforderungen haben. Zur Laufzeit müssen wir eine davon basierend auf bestimmten Bedingungen ausführen. Gängige Beispiele sind Sortieralgorithmen, Datenverschlüsselung, Benachrichtigungsdienste, Authentifizierungsdienste, Zahlungsdienste ...

Anstatt if-else-Bedingungen zu verwenden, können wir zur Implementierung ein Strategieentwurfsmuster verwenden. Das Strategieentwurfsmuster hilft uns, verschiedene Implementierungen zur Laufzeit auszuführen/zu verwenden. Die Strategie bietet Code Wiederverwendbarkeit, Flexibilität, Belangetrennung und Erweiterbarkeit.

Bedenken Sie, dass Sie einen einheitlichen Authentifizierungsdienst entwickelt haben, der Anfragen von verschiedenen Kanälen/Kunden entgegennimmt. Zur Laufzeit müssen Sie basierend auf der Konfiguration entscheiden, welche Implementierung für Authentifizierungszwecke verwendet wird (dies könnte auch eine Anforderungsweiterleitung sein). Ihre Implementierungen können Okta, Azure Ad oder Your Own IAM sein.

Hinweis:Wir müssen Anbieter als unabhängige Module implementieren und sie als Abhängigkeit zum Hauptprojekt hinzufügen.

Strategieschnittstelle

public interface Authentication {

    AuthenticationRes authentication(AuthenticationReq authenticationReq);
    OtpDevicesRes otpDevices(OtpDevicesReq otpDevicesReq);
    SendOtpRes sendOtp(SendOtpReq sendOtpReq);
    VerifyOtpRes verifyOtp(VerifyOtpReq verifyOtpReq);

}
Nach dem Login kopieren

Konkrete Strategien

@Component("oktaAuthentication")
@Slf4j
public class OktaAuthentication implements Authentication {
    --------------
    --------------
    --------------
}

@Component("ferAuthentication")
@Slf4j
public class FerAuthentication implements Authentication {
      --------------
      --------------
      --------------
}

@Component("eapAuthentication")
@Slf4j
public class EapAuthentication implements Authentication {
      --------------
      --------------
      --------------
}
Nach dem Login kopieren

Service

@Service
@Slf4j
public class AuthenticationService {

    public Map<String, Authentication> authenticationProvidersMap;
    public Set<String> availableAuthProviders;

    public AuthenticationService(Map<String, Authentication> authenticationProvidersMap) {
        this.authenticationProvidersMap = authenticationProvidersMap;
        this.availableAuthProviders = this.authenticationProvidersMap.keySet();
        log.info("Available Auth providers:{}", this.availableAuthProviders);
    }

    public AuthenticationRes getAuthentication(AuthenticationReq authenticationReq, ClientDetails clientDetails) {

        //This method will identify authentication provider based on client details
        // and returns oktaAuthentication/eapAuthentication/ferAuthentication
        String authProvider = getAuthProviderDetails(clientDetails);

        if (this.availableAuthProviders.contains(authProvider)) {
            return this.authenticationProvidersMap.get(authProvider)
                    .authentication(authenticationReq);
        } else {
            throw new AuthProviderUnavailable(authProvider);
        }

    }


    public String getAuthProviderDetails(ClientDetails clientDetails) {
        // implement your business logic to return the provider that need to be used. 
    }
}
Nach dem Login kopieren

Wenn Sie Fragen haben, hinterlassen Sie bitte eine Frage im Kommentarbereich.

Das obige ist der detaillierte Inhalt vonStrategiedesignmuster im Frühling. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage