使用策略模式减少if else
首先要明确的说出策略模式会不可避免导致你的代码类变得很多,如果对应方法逻辑很复杂时可采用,如果逻辑不是很复杂就有点大材小用了。
package com.zihexin.application.strategy; /**
* @Author: SimonHu
* @Date: 2019/7/18 15:38
* @Description:定义策略模式
*/
public interface Strategy {
void consumeTask(); void refundTask(); void sqtConsumeTask(); void sqtRefundTask();
}
package com.zihexin.application.strategy.strategyImpl; import com.zihexin.application.strategy.SpringUtils;
import com.zihexin.application.strategy.Strategy;
import com.zihexin.application.task.BaiDuWaiMaiTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; /**
* @Author: SimonHu
* @Date: 2019/7/18 15:40
* @Description:
*/
@Component
public class BaiDuWaiMaiStrategy implements Strategy {
@Autowired
private BaiDuWaiMaiTask baiDuWaiMaiTask; public BaiDuWaiMaiStrategy() {
baiDuWaiMaiTask = SpringUtils.getBean("baiDuWaiMaiTask");
} @Override
public void consumeTask() {
baiDuWaiMaiTask.consumeTask();
} @Override
public void refundTask() {
baiDuWaiMaiTask.refundTask();
} @Override
public void sqtConsumeTask() {
} @Override
public void sqtRefundTask() {
}
}
package com.zihexin.application.strategy; import com.zihexin.application.strategy.strategyImpl.*; import java.util.HashMap;
import java.util.Map; /**
* @Author: SimonHu
* @Date: 2019/7/18 15:42
* @Description:策略工厂,负责Strategy实例的创建,避免if else判断
*/
public class StrategyFactory {
private static StrategyFactory factory = new StrategyFactory(); private StrategyFactory() {
} private static Map strategyMap = new HashMap<>(); static {
strategyMap.put("daMaiTask", new DmStrategy());
strategyMap.put("baiDuWaiMaiTask", new BaiDuWaiMaiStrategy());
strategyMap.put("elmTask", new ElmStrategy());
strategyMap.put("maoYanTask", new MaoYanStrategy());
strategyMap.put("meidianTask", new MeidianStrategy());
strategyMap.put("tppTask", new TPPStrategy());
strategyMap.put("wuBaTask", new WuBaStrategy());
} public Strategy creator(String type) {
return (Strategy) strategyMap.get(type);
} public static StrategyFactory getInstance() {
return factory;
}
}
package com.zihexin.application.strategy; /**
* @Author: SimonHu
* @Date: 2019/7/18 15:42
* @Description:创建环境角色Context:
*/
public class Context {
private Strategy strategy; public void consumeTask(String type) {
strategy = StrategyFactory.getInstance().creator(type);
strategy.consumeTask();
} public void refundTask(String type) {
strategy = StrategyFactory.getInstance().creator(type);
strategy.refundTask();
} public void sqtConsumeTask(String type) {
strategy = StrategyFactory.getInstance().creator(type);
strategy.sqtConsumeTask();
} public void sqtRefundTask(String type) {
strategy = StrategyFactory.getInstance().creator(type);
strategy.sqtRefundTask();
} public Strategy getStrategy() {
return strategy;
} public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
}
//调用
public void testst(String type) {
Context context = new Context();
context.consumeTask(type);
context.refundTask(type);
context.sqtConsumeTask(type);
context.sqtRefundTask(type);
}
使用策略模式减少if else的更多相关文章
- 有效的减少代码中太多的if、else?-策略模式
写这篇文章的目的和上一篇单例模式一样,策略模式也是一种常用的设计模式,太多的if-else不仅看着不太美观而且不好维护,对于自己来说也等于复习了一遍策略模式.先说一下策略 模式的定义: 策略模式封装了 ...
- javascript设计模式:策略模式
前言 策略模式有效利用组合.委托.多态等技术和思想,可以有效避免多重条件选择语句. 策略模式对开放-封闭原则提供了很好的支持,将算法封装在strategy中,使得他们易于切换.理解.扩展. 策略模式中 ...
- 设计模式-策略模式(Strategy Model)
1.概述 在开发过程中常常会遇到类似问题,实现一个功能的时候往往有多种算法/方法(策略),我们可以根据环境的不同来使用不同的算法或策略来实现这一功能. 如在人物比较排序的实现中,我们有 ...
- IOS之Objective-C学习 策略模式
对于策略模式,我个人理解策略模式就是对各种规则的一种封装的方法,而不仅仅是对算法的封装与调用而已.与工厂模式中简单工厂有点类似,但是比简单工厂更有耦合度,因为策略模式以相同的方法调用所有的规则,减少了 ...
- [Head First设计模式]策略模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- Java设计模式(十二) 策略模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...
- C++设计模式-Strategy策略模式
Strategy策略模式作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML图: Strategy模式将逻辑(算法)封装到一个类(Cont ...
- JAVA设计模式 之 策略模式
一. 定义 设计模式定义了算法族,分别封装起来,让他们之间可以互相替代,此模式让算法的变化独立于使用算法的客户(该定义来自于Head First 设计模式). 二. 应用场景 当我们在应用程序中完成一 ...
- 设计模式学习之策略模式(Strategy,行为型模式)(13)
转载地址:http://www.cnblogs.com/zhili/p/StragetyPattern.html 一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方 ...
随机推荐
- Advanced Installer 安装完成后,自动启动主程序。
这个耗时2天,才研究测试通过.一定要记住了方法: =========================================================================== ...
- 解决npm ERR!Unexpected end of JSON input while paring near (解析附近时JSON输入意外结束)'...."^2.0.0-rc.0","glob"'等npm install错误
摘要 最近更新了一次node,但是更新后npm的命令总是会报 npm WARN deprecated fsevents@2.0.6: Please update: there are crash fi ...
- js重点——作用域——作用域分类(三)
一.作用域可以分为全局作用域,局部作用域(函数作用域)和块级作用域. 1.全局作用域 代码在程序中的任何位置都能被访问到,window对象的内置属性都拥有全局作用域. <script> v ...
- JAVA语言程序设计课后习题----第六单元解析(仅供参考)
1 本题就是基本函数的用法 import java.util.Scanner; public class Poone { public static void main(String[] args) ...
- CDH5.16.1的kafka集群报错: No broker in ISR for partition [getngo_collect_apm_test,0]
1 详细错误 kafka.common.NoReplicaOnlineException: No broker in ISR for partition [getngo_collect_apm_tes ...
- 从Windows文件夹到Linux分区
1. 先说几句 如果你, 知道什么是Windows系统 简单使用Windows系统 想要了解或安装Linux 刚接触Linux会有以下疑惑, 什么是分区? 如何建立分区? 怎么安装系统到到D盘? 安装 ...
- web开发:动画及阴影
一.小米拼接 二.过渡动画 三.过度案例 四.盒子阴影 五.伪类设计边框 一.小米拼接 将区域整体划分起名 => 对其他区域布局不产生影响提出公共css => reset操作当有区域发送显 ...
- 010.简单查询、分组统计查询、多表连接查询(sql实例)
-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SEL ...
- java的概念了解(jdk,jre,jvm,javase,javaee,javame)
jvm jvm:java virtual machine,俗称:java虚拟机,只认识xxx.class这类文件 jre jre:java runtime environment,俗称java运行环境 ...
- BZOJ 1135 P3488 LYZ-Ice Skates 线段树+Hall
https://www.luogu.org/problem/P3488 根据Hall定理 左边任意一个区间L-R a[i]的和sum[l~r] 都要<= (R-L+1+d)*K 把(R-L+1) ...