首先要明确的说出策略模式会不可避免导致你的代码类变得很多,如果对应方法逻辑很复杂时可采用,如果逻辑不是很复杂就有点大材小用了。

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的更多相关文章

  1. 有效的减少代码中太多的if、else?-策略模式

    写这篇文章的目的和上一篇单例模式一样,策略模式也是一种常用的设计模式,太多的if-else不仅看着不太美观而且不好维护,对于自己来说也等于复习了一遍策略模式.先说一下策略 模式的定义: 策略模式封装了 ...

  2. javascript设计模式:策略模式

    前言 策略模式有效利用组合.委托.多态等技术和思想,可以有效避免多重条件选择语句. 策略模式对开放-封闭原则提供了很好的支持,将算法封装在strategy中,使得他们易于切换.理解.扩展. 策略模式中 ...

  3. 设计模式-策略模式(Strategy Model)

    1.概述     在开发过程中常常会遇到类似问题,实现一个功能的时候往往有多种算法/方法(策略),我们可以根据环境的不同来使用不同的算法或策略来实现这一功能.     如在人物比较排序的实现中,我们有 ...

  4. IOS之Objective-C学习 策略模式

    对于策略模式,我个人理解策略模式就是对各种规则的一种封装的方法,而不仅仅是对算法的封装与调用而已.与工厂模式中简单工厂有点类似,但是比简单工厂更有耦合度,因为策略模式以相同的方法调用所有的规则,减少了 ...

  5. [Head First设计模式]策略模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  6. Java设计模式(十二) 策略模式

    原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...

  7. C++设计模式-Strategy策略模式

    Strategy策略模式作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML图: Strategy模式将逻辑(算法)封装到一个类(Cont ...

  8. JAVA设计模式 之 策略模式

    一. 定义 设计模式定义了算法族,分别封装起来,让他们之间可以互相替代,此模式让算法的变化独立于使用算法的客户(该定义来自于Head First 设计模式). 二. 应用场景 当我们在应用程序中完成一 ...

  9. 设计模式学习之策略模式(Strategy,行为型模式)(13)

    转载地址:http://www.cnblogs.com/zhili/p/StragetyPattern.html 一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方 ...

随机推荐

  1. 【Android】二、HelloWorld

    1. 按照该网址写HelloWorld 例子   http://www.runoob.com/android/android-hello-world-example.html 2.点击 make pr ...

  2. ::selection伪元素改变文本选中颜色

    在看张鑫旭大神的文章,刚刚发现了这个,感觉应该后面有用,先存起来. 效果如下: 代码如下: <!DOCTYPE html> <html> <head> <me ...

  3. xss part2

    0x01 xss challenge level 6-10 1.1 level 6 test with typical, notice the script has changed change sc ...

  4. 0502 xss 实验

    0x01 dvwa xss(reflected) 1.1 Security Level: low use the typical <script>alert(1)</script&g ...

  5. 如何入门Pytorch之三:如何优化神经网络

    在上一节中,我们介绍了如何使用Pytorch来搭建一个经典的分类神经网络.一般情况下,搭建完模型后训练不会一次就能达到比较好的效果,这样,就需要不断的调整和优化模型的各个部分.从而引出了本文的主旨:如 ...

  6. Django单表查询及其方法

    单表查询 前期准备 首先新建一个test的python文件,然后再manage.py中导入main语句及其下面的复制到新文件中 并导入django 写上django.setup() 就可以导入对应的m ...

  7. 03_Hive的交互方式

    之前使用的Shell方式只是Hive交互方式中的一种,还有一种就是将Hive启动为服务运行在一个节点上,那么剩下的节点 就可以使用客户端来连接它,从而也可以使用Hive的数据分析服务 1.Hive的交 ...

  8. ARM体系结构与编程读书笔记——处理器的寄存器

    ARM处理器共有37个寄存器,其中包括: 31个通用寄存器,包括程序计数器(PC)在内,寄存器都是32位: 6个状态寄存器,这些寄存器都是32位的,目前只使用了其中12位: 通用寄存器 可以分为下面3 ...

  9. anaconda环境---ubuntu下重装

    anaconda环境---ubuntu下重装 @wp20190312 为何重装? 配置一个环境,意外发现conda命令不好用了,提示“找不到conda模块”,整个conda虚拟环境中的工程项目无法使用 ...

  10. java 中操作字符串都有哪些类?(未完成)它们之间有什么区别?(未完成)

    java 中操作字符串都有哪些类?(未完成)它们之间有什么区别?(未完成)