最简单的策略模式

策略模式是啥?

说白了就是同一个事情,但处理事情的方式不相同。

Order order = 订单信息
if (payType == 微信支付) {
    微信支付流程
} else if (payType == 支付宝) {
    支付宝支付流程
} else if (payType == 银行卡) {
    银行卡支付流程
} else {
    暂不支持的支付方式
}

很简单的例子,也好理解。用户要付钱,到后台就一个接口,至于你是微信还是支付宝等等,都是做一个事情快乐的收钱

最终效果

在这里插入图片描述

如何实现

目录结构

在这里插入图片描述

上才艺(小白见解)

Controller层可以不看。主要是service层代码。

(方式一)是使用了工厂模式获取对应的实现类,有Spring工厂已经写好了何乐不为。因为要拿spring的上下文,所以随便写了一个SpringContext类。

当然还有(方式二通过注入List的方式实现不太推荐毕竟要循环判断,可以考虑使用Map的方式

@Controller
@RequestMapping("/test")
public class PractiseController {

    @Autowired
    private TestService testServiceImpl;

    @RequestMapping("/test1")
    @ResponseBody
    public String returnStr(@RequestParam("type") String type) {
        String str = testServiceImpl.outString(type);
        return str;
    }
}
public interface TestService {
    /**
     * 策略模式执行outString
     * @param type: 实现类的名字
     */
    String outString(String type);
    
    public String support();
}
@Service
public class TestServiceImpl implements TestService {
	// 方式一:
    @Override
    public String outString(String type) {
        String str = "初始化字符串";
        // 使用Spring工厂,拿到对应的实现类
        ContentService service = SpringContext.getApplicationContext()
                .getBean(type, ContentService.class);
        // 执行相应方法
        str = service.outString();
        return str;
    }
    
    // 方式二:
    @Autowired
    private List<ContentService> contentServiceImpls;
    @Override
    public String outString(String type) {
        String str = "初始化字符串";
        // 使用Spring工厂,拿到对应的实现类
        for (ContentService contentServiceImpl : contentServiceImpls) {
            if (type.equals(contentServiceImpl.support())) {
                str = contentServiceImpl.outString();
                break;
            }
        }
        return str;
    }
}
@Component("test1ContentServiceImpl")
public class Test1ContentServiceImpl implements ContentService {

    @Override
    public String outString() {
        return "我是test 1";
    }

    @Override
    public String support() {
        return "test1ContentServiceImpl";
    }
}
@Component
public final class SpringContext implements ApplicationContextAware {

    private SpringContext() {

    }

    private static ApplicationContext applicationContext;

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContext.applicationContext = applicationContext;
    }
}

能看到这说明你能成大事啊!有帮助的话就留下你的足迹吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值