前言:
使用设计模式的目的:为了可重用代码和可维护性、让代码更容易被他人理解、保证代码可靠性。同时合理的运用可以使你的代码上升一个level。下面介绍几种设计模式,本人在项目经常会使用的,废话不多说,开干!!!
- 策略模式
- 责任链模式
- 模板模式
- 装饰者模式
- 观察者模式
一:策略模式
策略模式是一种行为设计模式,它定义了一系列的算法,并将每个算法封装起来,使它们可以互换使用。策略模式让算法的变化独立于使用算法的客户, 提高了代码的灵活性和可维护性,是构建大型企业级应用的有力工具。
-
优点:
策略模式使得算法的变化独立于使用算法的客户,可以灵活地更换或添加新的算法。避免了使用多重条件语句,提高了代码的可读性和可维护性。
-
缺点:
如果策略类很多,可能会导致客户端代码中出现许多策略类的引用,增加了系统的复杂性。客户端必须了解不同的策略类,并选择合适的策略。
代码演示:
使用支付场景讲解,支付方式有(微信,支付宝,银联)。
-
1.定义支付接口
/**
* @Author
* @Description 支付接口
* @Date
*/
public interface PayService {
/**
* 判断支付类型
*
* @param payType 支付类型
* @return
*/
boolean payType(PayType payType);
/**
* 具体支付方法
*/
String payment();
}
-
2.微信支付实现类
/**
* @Author
* @Description 微信支付实现类
* @Date
*/
@Service
public class WechatPayServiceImpl implements PayService {
@Override
public boolean payType(PayType payType) {
return PayType.WechatPay.equals(payType);
}
@Override
public String payment() {
return ">>>>>>>>微信支付";
}
}
-
3.支付宝支付实现类
/**
* @Author
* @Description 支付宝支付实现类
* @Date
*/
@Service
public class AliPayServiceImpl implements PayService {
@Override
public boolean payType(PayType payType) {
return PayType.AliPay.equals(payType);
}
@Override
public String payment() {
return ">>>>>>>>支付宝支付";
}
}
-
4.银联支付实现类
/**
* @Author
* @Description 银联支付实现类
* @Date
*/
@Service
public class UnionPayServiceImpl implements PayService {
@Override
public boolean payType(PayType payType) {
return PayType.UnionPay.equals(payType);
}
@Override
public String payment() {
return ">>>>>>>>银联支付";
}
}
-
5.测试
/**
* @Author
* @Description 测试
* @Date
*/
@RestController
@AllArgsConstructor
@RequestMapping("/test")
public class PayController {
private final List<PayService> payServiceList;
@RequestMapping("/pay")
public String pay() {
//默认传支付宝支付
return payServiceList.stream()
.filter(provider -> provider.payType(PayType.AliPay))
.findFirst()
.map(provider -> provider.payment())
.orElseThrow(() -> new IllegalArgumentException("不存在该支付类型"));
}
}
6.执行结果:
使用场景:
- 支付场景(多种支付方式)
- 采集设备点位根据运算符判断(大于,小于,等于,范围等等)
- 等等场景
二:责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象按照顺序处理请求,并且每个对象可以选择自己是否处理该请求或将其传递给下一个对象。这种模式将请求的发送者和接收者解耦,同时提供了更大的灵活性和可扩展性。
-
优点:
降低耦合度。它将请求的发送者和接