Python 官方文档:入门教程 => 点击学习
目录优缺点spring中哪里使用策略模式策略模式设计图代码案例为什么使用策略模式? 答:策略模式是解决过多if-else (或者switch-case)代码块的方法之一,提高代码的可
为什么使用策略模式?
答:策略模式是解决过多if-else
(或者switch-case
)代码块的方法之一,提高代码的可维护性、可扩展性和可读性。
优点
缺点
策略类数量增多(每一个策略类复用性很小,如果需要增加算法,就只能新增类)。所有的策略类都需要对外暴露(使用的人必须了解使用策略,这个就需要其它模式来补充,比如工厂模式、代理模式)。
ClassPathXmlApplicationContext Spring 底层Resource接口采用策略模式
Spring 为Resource 接口提供了如下实现类:
统一支付接口
public interface Payment {
String getPayType();
String pay(String order);
}
各种支付方式(策略)
@Component
public class AlipayPayment implements Payment {
@Override
public String getPayType() {
return "alipay";
}
@Override
public String pay(String order) {
//调用阿里支付
System.out.println("调用阿里支付");
return "success";
}
}
@Component
public class BankCardPayment implements Payment {
@Override
public String getPayType() {
return "bankCard";
}
@Override
public String pay(String order) {
//调用微信支付
System.out.println("调用银行卡支付");
return "success";
}
}
@Component
public class WxPayment implements Payment {
@Override
public String getPayType() {
return "weixin";
}
@Override
public String pay(String order) {
//调用微信支付
System.out.println("调用微信支付");
return "success";
}
}
使用工厂模式来创建策略
public class PaymentFactory {
private static final Map<String, Payment> payStrategies = new HashMap<>();
static {
payStrategies.put("weixin", new WxPayment());
payStrategies.put("alipay", new AlipayPayment());
payStrategies.put("bankCard", new BankCardPayment());
}
public static Payment getPayment(String payType) {
if (payType == null) {
throw new IllegalArgumentException("pay type is empty.");
}
if (!payStrategies.containsKey(payType)) {
throw new IllegalArgumentException("pay type not supported.");
}
return payStrategies.get(payType);
}
}
测试类
public class Test {
public static void main(String[] args) {
String payType = "weixin";
Payment payment = PaymentFactory.getPayment(payType);
String pay = payment.pay("");
System.out.println(pay);
}
}
到此这篇关于Java设计模式之策略模式详解的文章就介绍到这了,更多相关Java策略模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Java设计模式之策略模式案例详解
本文链接: https://www.lsjlt.com/news/165291.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0