使用策略模式减少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 一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方 ...
随机推荐
- Django rest-framework框架-版本控制
第一版: from rest_framework.versioning import BaseVersioning class ParamVersion(object): def determine_ ...
- javaIO——BufferedReader
今天来学习一下 java.io.BufferedReader ,从命名可以看出,跟前面学习的 StringReader 和 CharArrayReader 有些不一样,这些都是按照数据源类型命名,Bu ...
- react import 配置路径别名'@',简化import Component的方式
摘要 在react中,大多数业务逻辑都组件化:极大的减轻了代码的冗余度,如果组件的层次比较深的话,组件的import就比较费劲,在import时使用“../../components/test”的方式 ...
- PCQQ - 发送自定义的XML卡片消息
效果: 原理: qq分享产生的xml卡片消息存储在qq内存中,可以在qq运行内存中搜索找到其xml源码,记录源码相应的内存地址,通过内存地址修改掉内存数据,再次转发这条分享的消息就会发现内容的变化. ...
- Spark的Shuffle
0. Shuffle概述 要理解什么是Shuffle,首先介绍大数据与分布式.我们知道大数据的存储是分布式存储,大数据的计算框架是分布式的计算框架.分布式必然存在数据的交互传输,简言之Shuffle就 ...
- Vue介绍:vue导读2
一.实例中的成员 二.高级指令 三.组件初识 一.实例中的成员 # 计算computed <!DOCTYPE html> <html> <head> <met ...
- linux—-远程连接——管理工具
1,linux服务器需要安装ssh服务端,端口一般22 2,使用ssh客户端连接linux服务器: 常用工具: putty xshell 3,上传文件工具: 使用sftp,linux需要安装sftp服 ...
- java——OOM内存泄漏
资料: 一.什么是OOM OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个erro ...
- okhttp初识拦截器
拦截器流程: 简单回顾同步 / 异步: 同步请求就是执行请求的操作是阻塞式,直到HTTP响应返回. 异步请求就类似于非阻塞式的请求,它的执行结果一般都是通过接口回调的方式告知调用者. okHttp拦截 ...
- Webpack v4.8.3 快速入门指南
一.进入 https://webpack.docschina.org/ 官方文档,点击 "文档" 进入 文档页面,文档中包含 “概念,配置,API,指南,LOADERS,插件&q ...