欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Java设计模式---策略模式

Java设计模式---策略模式

2025/2/8 11:26:11 来源:https://blog.csdn.net/weixin_50670076/article/details/145468957  浏览:    关键词:Java设计模式---策略模式

策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法(或策略),并将每个算法封装起来,使得它们可以互相替换。策略模式允许算法的变化独立于使用算法的客户(即客户端代码)。简而言之,它让我们可以在运行时选择具体的算法,避免了大量的 if-elseswitch 语句。

策略模式的组成部分

策略模式主要有以下几个组成部分:

  1. Context(上下文):持有一个策略的引用,可以更换不同的策略来执行某个操作。
  2. Strategy(策略接口):定义一个策略接口,通常这个接口包含一个方法,这个方法是被策略实现类所共享的。
  3. ConcreteStrategy(具体策略):具体的策略类,实现策略接口,定义具体的算法或行为。
  4. Client(客户端):通过设置策略(ConcreteStrategy)来决定使用哪种具体策略。

策略模式的结构图

        +---------------------+
        |      Context        |
        +---------------------+
        | - strategy: Strategy |
        +---------------------+
        | + setStrategy()      |
        | + execute()          |
        +---------------------+
                  ^
                  |
      +-----------+-----------+
      |                       |
+--------------+        +--------------+
| Strategy     |        | ConcreteStrategyA |
+--------------+        +---------------------+
| + algorithm()|        | + algorithm()       |
+--------------+        +---------------------+
                        +---------------------+
                        | ConcreteStrategyB   |
                        +---------------------+
                        | + algorithm()       |
                        +---------------------+
 

1.方法入口

@Component
public class AppContext {@Autowiredprivate List<AppStrategy> userAppStrategyList;private final Map<String, AppStrategy> STRATEGYMAP = new HashMap<>();@PostConstructpublic void init() {userAppStrategyInterfaceList.forEach(strategy -> {STRATEGYMAP.put(strategy.type(), strategy);});}public void add(UserDto userDto) {STRATEGYMAP.entrySet().stream().filter(entry -> entry.getKey().contains(userDto.getType().toString())).findFirst().ifPresent(entry -> entry.getValue().add(userDto));}}

2.接口

public interface AppStrategy {String type();void add(UserDto dto);}

3.实现类

实现类1

@Service
@Slf4j
public class AppCompanyService implements AppStrategy {@Overridepublic String type() {return "1,2";}@Overridepublic void add(UserDto dto) {log.info("调用了实现类1");}
}

 实现类2

@Service
@Slf4j
public class AppPersonService implements AppStrategy {@Overridepublic String type() {return "3,4";}@Overridepublic void add(UserDto dto) {log.info("调用了实现类2");}
}

4.调用

@Service
@Slf4j
public class AppUserService {@Resourceprivate AppContext appContext;@GlobalTransactionalpublic void add(UserDto userDto) throws Exception {userDto.setType(1);appIdentityContext.add(userIdentityDto);}
}

这样就完成了一个策略模式的小demo。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com