Comment éliminer le switch-case dans Springboot
La logique de base est la suivante :
String event = crsRequest.getEvent(); CRSResponse crsResponse = null; switch (event) { case CRSRequestEvent.APP_START: crsResponse = processAppStartCommand(crsRequest); break; case CRSRequestEvent.INIT_COMPLETE: crsResponse = processInitCompleteCommand(crsRequest); break; case CRSRequestEvent.COLLECT_COMPLETE: crsResponse = processCollectCompleteCommand(crsRequest); break; case CRSRequestEvent.COLLECT_NO_INPUT: crsResponse = processCollectNoInputCommand(crsRequest); break; case CRSRequestEvent.PLAY_COMPLETE: crsResponse = processPlayCompleteCommand(crsRequest); break; default: }
Après l'avoir écrit, vous constaterez qu'à mesure que les événements augmentent, ce code sera très long, et les fonctions de traitement de chaque événement sont également concentrées dans une seule classe, ce qui est difficile à maintenir. Par conséquent, grâce à la recherche et à l'apprentissage, nous avons découvert que nous pouvons utiliser les annotations + le mode stratégie + l'usine simple de Springboot pour éliminer le cas de commutation.
Refactor
Définir la structure
public enum CRSEvent { APP_START("APP_START"), INIT_COMPLETE("INIT_COMPLETE"), PLAY_COMPLETE("PLAY_COMPLETE"), COLLECT_COMPLETE("COLLECT_COMPLETE"), COLLECT_NO_INPUT("COLLECT_NO_INPUT"), APP_END("APP_END"), RESP_ERROR_CMD("RESP_ERROR_CMD"); private String event; CRSEvent(String event){ this.event = event; } public String getEvent() { return event; } public void setEvent(String event) { this.event = event; } }
Définir une annotation
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface CRSEventAnnotation { CRSEvent value(); }
Définir l'interface de traitement des événements
public interface EventProcess { CRSResponse execute(CRSRequest resquest); }
Toutes les classes de traitement du temps doivent implémenter cette interface. Parmi eux, exécuter est la méthode de traitement des événements
Écrivez une classe de traitement du temps spécifique
Ensuite, écrivez les classes de traitement des événements une par une, prenez l'exemple suivant :
@Component("appStartProcess") @CRSEventAnnotation(value = CRSEvent.APP_START) public class AppStartProcess implements EventProcess{ @Override public CRSResponse execute(CRSRequest resquest) { CRSResponse response = new CRSResponse(); response.setCommand(CRSResponseCmd.IVR_SESSION_INIT); CRSResponse.Message message = new CRSResponse.Message(); message.setTts_vid("65580"); message.setTts_speed("120"); response.setMessage(message); return response; } }
Définissez la classe d'outils SpringContext
@Component public class SpringContextUtil implements ApplicationContextAware{ private ApplicationContext context; public ApplicationContext getContext(){ return context; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.context = applicationContext; } }
Définir une usine de classe de traitement d'événements, utilisée pour produire divers objets de traitement d'événements
@Component public class EventProcessFactory { @Autowired SpringContextUtil contextUtil; private static Map<CRSEvent, EventProcess> eventProcessMap = new ConcurrentHashMap<>(); public EventProcessFactory() { Map<String, Object> beanMap = contextUtil.getContext().getBeansWithAnnotation(CRSEventAnnotation.class); for (Object evetProcess : beanMap.values()) { CRSEventAnnotation annotation = evetProcess.getClass().getAnnotation(CRSEventAnnotation.class); eventProcessMap.put(annotation.value(), (EventProcess) evetProcess); } } public static EventProcess createEventProcess(CRSEvent event){ return eventProcessMap.get(event); } }
Modification du code d'appel
CRSEvent crsEvent = CRSEvent.valueOf(crsRequest.getEvent()); EventProcess eventProcess = EventProcessFactory.createEventProcess(crsEvent); if (eventProcess != null){ return eventProcess.execute(crsRequest); } return null;
De cette façon, le code n'a pas de cas de commutation, et l'ajout d'un événement est également très simple, il suffit d'implémenter EventProcess interface.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Différences entre la version japonaise du commutateur et la version de Hong Kong : 1. Il existe des différences majeures dans le chargeur. La version japonaise et le port de charge standard national sont communs, et la version de Hong Kong utilise une prise triangulaire britannique. La version japonaise utilise le paiement par carte à points, tandis que la version de Hong Kong utilise Alipay ; 3. , La garantie après-vente pour la version de Hong Kong doit être renvoyée par courrier au point après-vente de Hong Kong, tandis que la version japonaise doit être envoyée par courrier à le point après-vente désigné au Japon.

Solution pour le commutateur qui ne répond pas lorsqu'il est connecté au téléviseur : 1. Vérifiez si l'alimentation du commutateur et le téléviseur sont connectés. 2. Vérifiez si l'interface du câble HDMI du téléviseur est bien branchée. 3. Ouvrez le capot arrière du téléviseur ; Changez la base et vérifiez si le cordon d'alimentation et le câble HDMI sont bien branchés ; 4. Vérifiez si le commutateur est allumé et placé dans la base ; 5. Vérifiez si le téléviseur a changé la source du signal.

Elden's Ring peut-il être joué sur la plateforme Switch ? En tant que jeu d'action RPG très charmant, de nombreux amis ne savent peut-être pas s'il peut être joué sans problème sur la plateforme Switch. La réponse est qu'il ne peut pas être joué pour le moment. Ring of Elden peut-il être joué sur Switch ? Réponse : Il ne peut pas être joué sur Switch. Ce jeu d'action et de rôle très attendu de la série Souls est officiellement sorti. Les joueurs peuvent l'acheter sur PC, PS4/5 et Xbox Series eX|S/XboxOne et en faire l'expérience immédiatement. De nombreux amis possédant un Switch sont peut-être encore impatients de profiter de ce jeu sur NS, mais malheureusement, il n'existe pas de version Switch de ce jeu. Selon les exigences de configuration du site officiel, la configuration du jeu est relativement élevée et sw

L'interrupteur ne peut pas être chargé sur la base tout le temps. Les risques sont les suivants : 1. Réduire la durée de vie de la batterie et la durée de vie de la batterie. 2. Faire griller la mémoire.

SpringBoot et SpringMVC sont tous deux des frameworks couramment utilisés dans le développement Java, mais il existe des différences évidentes entre eux. Cet article explorera les fonctionnalités et les utilisations de ces deux frameworks et comparera leurs différences. Tout d’abord, découvrons SpringBoot. SpringBoot a été développé par l'équipe Pivotal pour simplifier la création et le déploiement d'applications basées sur le framework Spring. Il fournit un moyen rapide et léger de créer des fichiers exécutables autonomes.

La mémoire du switch32g n'est pas suffisante. Les raisons sont les suivantes : 1. Si vous souhaitez acheter la version numérique du jeu et que vous souhaitez acheter des captures d'écran DLC et les stocker dans la machine portable, ce n'est pas suffisant. version numérique du jeu, 32 Go de mémoire permettent de stocker environ 2 à 3 jeux, ce qui n'est pas suffisant. Le besoin de jouer à des jeux ; 3. Les jeux numériques et leurs DLC sont généralement maintenus sur la 5G. dans le système, le téléchargement de jeux est plus difficile pour les joueurs.

Les différences entre Switch Lite et Switch sont : 1. Différentes tailles ; 2. Différentes tailles d'écran et poids corporels ; 3. Différentes poignées, si elles sont détachables et différentes fonctions de poignée ; 4. Différentes durées de vie de la batterie ; . Supporte différents jeux ; 6. Différentes couleurs.

Cet article écrira un exemple détaillé pour parler du développement réel de dubbo+nacos+Spring Boot. Cet article ne couvrira pas trop de connaissances théoriques, mais écrira l'exemple le plus simple pour illustrer comment dubbo peut être intégré à nacos pour créer rapidement un environnement de développement.
