什么是策略模式
策略模式属于行为型模式,类的行为可以根据不同的策略在运行中更改。
策略模式的作用
策略模式主要解决了使用if-else所带来的复杂性和难以维护的问题。
策略模式的架构图
- Strategy(策略接口) :定义抽象的行为方法
- OperationAdd、OperationSubtract、OperationMultiply(这三个为具体的策略类):实现抽象的策略方法
- Context(环境):运行特定的具体策略类,可以根据不同的策略做出对应策略类的行为
消息推送相信大家都已经不陌生了,消息一般包括:短信、email、钉钉机器人消息、企业微信等等…当我们在企业中需要集成多种消息类型时可能会通过使用if-else判断发送不同的消息,下面分别介绍if-else写法和利用策略模式的写法
public interface MessageStrategy {
void send(String message);
}
public class ShortMessageStrategy implements MessageStrategy {
@Override
public void send(String message) {
System.out.println("发送短信"+message);
}
}
public class EmailStrategy implements MessageStrategy {
@Override
public void send(String message) {
System.out.println("发送邮件"+message);
}
}
public static void main(String[] args) {
Integer sendType = 1;
if(SendType.SHORT_MESSAGE.getType().equals(sendType)){
ShortMessageStrategy shortMessageStrategy = new ShortMessageStrategy();
shortMessageStrategy.send("Hello msg");
}else if (SendType.EMAIL.getType().equals(sendType)){
EmailStrategy emailStrategy = new EmailStrategy();
emailStrategy.send("Hello email");
}
}
if-else写法方式的缺点:需要存在多种发送方式时代码整体会显得非常长,让人看着不舒服,扩展性差,耦合度高
public interface MessageStrategy {
void send(String message);
}
public class ShortMessageStrategy implements MessageStrategy {
@Override
public void send(String message) {
System.out.println("发送短信"+message);
}
}
public class EmailStrategy implements MessageStrategy {
@Override
public void send(String message) {
System.out.println("发送邮件"+message);
}
}
public class Content {
private static final Map<Integer, MessageStrategy> strategies = new HashMap<>();
static {
strategies.put(1,new ShortMessageStrategy());
strategies.put(2,new EmailStrategy());
}
public static MessageStrategy getStrategy(Integer type){
if (type == null){
throw new IllegalArgumentException("type should not be empty");
}
return strategies.get(type);
}
}
public static void main(String[] args) {
Integer sendType = 1;
MessageStrategy messageStrategy = Content.getStrategy(sendType);
messageStrategy.send("Hello");
}
if-else写法方式
优点:1. 策略方式可以自由切换 2. 避免使用多重条件判断,代码看起来比较少易懂 3.解耦,扩展性比较好,加一个策略只需对应加一个策略类
缺点:需要定义多个策略类
总结
策略模式主要是针对不用的策略做出不同的行为,从而达到行为解耦,所以它属于一种行为型模式,我们要学习好策略模式的思想,设计模式不要为了用它而改变代码,需要结合实际的业务场景并且符合这种设计模式的思想才使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)