枚举方式实现设计模式-策略模式

简介: 枚举方式实现设计模式-策略模式

正文


设想场景例如 登录策略


1.编写枚举类


public enum LoginEnum {
  OTHER_PHONE_LOGIN("OTHER", "otherLoginService", "其他手机号登录"),
  NATIVE_PHONE_LOGIN("NATIVE", "nativeLoginService", "本机登录"),
  QQ_LOGIN("QQ", "qqLoginService", "QQ登录"),
  WE_CHAT_LOGIN("WECHAT", "weChatLoginService", "微信登录"),;
  LoginEnum(String loginType, String serviceName, String desc) {
    this.loginType = loginType;
    this.serviceName = serviceName;
    this.desc = desc;
  }
  public static LoginEnum getValue(String loginType) {
    for (LoginEnum loginEnum : LoginEnum.values()) {
      if (loginEnum.getLoginType().equals(loginType)) {
        return loginEnum;
      }
    }
    return LoginEnum.NATIVE_PHONE_LOGIN;
  }
  private String loginType;
  private String serviceName;
  private String desc;
  public String getLoginType() {
    return loginType;
  }
  public String getServiceName() {
    return serviceName;
  }
  public String getDesc() {
    return desc;
  }
}


2.编写登录策略接口类


/**
 * @Author liuy
 * @Description 登录策略接口类
 * @Date 2021/11/10 14:54
 * @Version 1.0
 */
public interface LoginInterface {
     String login(LoginVO loginVO) ;
}


3.编写实现类


9.png

注意实现类的@Service必须与LoginEmun的serviceName的值一致,这样spring才能根据serviceName找到这个策略

例如:OtherLoginService

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @Author liuy
 * @Description 其他手机号登录服务
 * @Date 2021/11/10 15:23
 * @Version 1.0
 */
@Service("otherLoginService")
public class OtherLoginService implements LoginInterface{
    @Override
    public String login(String loginType) {
        return "我是其他手机号登录"
    }
}


4.编写登录环境角色类


import com.soboot.auth.enums.LoginEnum;
import com.soboot.auth.service.LoginInterface;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * @Author liuy
 * @Description 登录环境角色类
 * @Date 2021/11/10 15:31
 * @Version 1.0
 */
@Service
public class LoginSpringContext {
    @Autowired
    private final Map<String, LoginInterface> strategyMap = new ConcurrentHashMap<>(4);
    /**
     * 根据登录类型获取不同策略
     * @param loginType
     * @return
     */
    public LoginInterface getService(String loginType) {
        LoginEnum loginEnum = LoginEnum.getValue(loginType);
        return strategyMap.get(loginEnum.getServiceName());
    }
}

这个类的作用是把所有策略 加载到内存


5.调用策略


    @Autowired
    private LoginSpringContext loginSpringContext;
    /**
     * 登录通用服务
     *
     * @param loginVO 登录参数
     * @return 登录信息
     */
    public String loginIn(String loginType) {
        LoginInterface service = loginSpringContext.getService(loginType);
        String loginTypeName= service.login(loginVO);
        return loginTypeName;
    }


当调用这个方法时只需要填入对应的loginType就能实现对应的策略!


相关文章
|
10天前
|
设计模式 算法 测试技术
PHP中的设计模式:策略模式的应用与实践
在软件开发的浩瀚海洋中,设计模式如同灯塔,指引着开发者们避开重复造轮子的暗礁,驶向高效、可维护的代码彼岸。今天,我们将聚焦于PHP领域中的一种重要设计模式——策略模式,探讨其原理、应用及最佳实践,揭示如何通过策略模式赋予PHP应用灵活多变的业务逻辑处理能力,让代码之美在策略的变换中熠熠生辉。
|
2天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与应用
本文将详细探讨PHP中的策略模式,从基本概念到实际应用进行深入分析。通过具体代码示例和应用场景,帮助读者理解并掌握这一设计模式的使用,提升软件开发的灵活性和维护性。
|
4月前
|
设计模式 算法
策略模式-大话设计模式
策略模式-大话设计模式
|
11天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入探索与实践在软件开发的广袤天地中,PHP以其独特的魅力和强大的功能,成为无数开发者手中的得力工具。而在这条充满挑战与机遇的征途上,设计模式犹如一盏明灯,指引着我们穿越代码的迷雾,编写出更加高效、灵活且易于维护的程序。今天,就让我们聚焦于设计模式中的璀璨明珠——策略模式,深入探讨其在PHP中的实现方法及其实际应用价值。
策略模式,这一设计模式的核心在于它为软件设计带来了一种全新的视角和方法。它允许我们在运行时根据不同情况选择最适合的解决方案,从而极大地提高了程序的灵活性和可扩展性。在PHP这门广泛应用的编程语言中,策略模式同样大放异彩,为开发者们提供了丰富的创作空间。本文将从策略模式的基本概念入手,逐步深入到PHP中的实现细节,并通过一个具体的实例来展示其在实际项目中的应用效果。我们还将探讨策略模式的优势以及在实际应用中可能遇到的挑战和解决方案,为PHP开发者提供一份宝贵的参考。
|
13天前
|
设计模式 运维 算法
Java设计模式-策略模式(15)
Java设计模式-策略模式(15)
|
20天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深度解析
在PHP开发中,策略模式是一种行为设计模式,它允许你在运行时根据不同情况选择不同的算法或行为。本文将深入探讨策略模式的定义、结构、使用场景以及在PHP中的实现方法,并通过实例展示如何在PHP项目中应用策略模式来提高代码的灵活性和可维护性。
|
21天前
|
设计模式 人工智能 算法
PHP中的设计模式:策略模式的深入解析与实践软件测试中的人工智能革命:提升效率与准确性的新篇章
在PHP开发中,理解并运用设计模式是提升代码质量和可维护性的重要途径。本文聚焦于策略模式(Strategy Pattern),一种行为型设计模式,它允许在运行时选择算法或业务规则。通过本文,我们将深入探讨策略模式的定义、结构、使用场景以及如何在PHP项目中有效地实现和利用策略模式。不同于性能优化等技术性摘要,本文着重于提供对策略模式全面而实用的理解,助力开发者编写出更加灵活和可扩展的应用程序。 本文深入探讨了人工智能在软件测试领域的应用,揭示了其如何显著提高测试过程的效率和准确性。通过实际案例分析,展示了AI技术在自动化测试、缺陷检测及结果分析中的关键作用,并讨论了实施AI测试策略时面临的挑
17 3
|
25天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深度解析
在本文中,我们将深入探讨PHP编程中的策略模式,这是一种行为型设计模式,用于定义一系列算法,将每个算法封装起来,并使它们可以互换。通过详细讲解策略模式的概念、结构以及在PHP中的实现方式,我们希望能够帮助读者更好地理解和应用这一设计模式,提升代码的灵活性和可维护性。
26 1
|
13天前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。
|
2月前
|
设计模式 缓存 算法
揭秘策略模式:如何用Java设计模式轻松切换算法?
【8月更文挑战第30天】设计模式是解决软件开发中特定问题的可重用方案。其中,策略模式是一种常用的行为型模式,允许在运行时选择算法行为。它通过定义一系列可互换的算法来封装具体的实现,使算法的变化与客户端分离。例如,在电商系统中,可以通过定义 `DiscountStrategy` 接口和多种折扣策略类(如 `FidelityDiscount`、`BulkDiscount` 和 `NoDiscount`),在运行时动态切换不同的折扣逻辑。这样,`ShoppingCart` 类无需关心具体折扣计算细节,只需设置不同的策略即可实现灵活的价格计算,符合开闭原则并提高代码的可维护性和扩展性。
41 2