springboot实现设计模式-策略模式
在设计模式中除去⼯⼚单例等,策略模式应该算最常⽤的设计模式之⼀
在策略模式(Strategy Pattern)中,⼀个类的⾏为或其算法可以在运⾏时更改。这种类型的设计模式属于⾏为型模式。
在策略模式中,我们创建表⽰各种策略的对象和⼀个⾏为随着策略对象改变⽽改变的 context 对象。策略对象改变 context 对象的执⾏算法。
意图:定义⼀系列的算法,把它们⼀个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使⽤ if...else 所带来的复杂和难以维护。
何时使⽤:⼀个系统有许多许多类,⽽区分它们的只是他们直接的⾏为。
如何解决:将这些算法封装成⼀个⼀个的类,任意地替换。
关键代码:实现同⼀个接⼝。
优点:
算法可以⾃由切换。
避免使⽤多重条件判断。
扩展性良好。
缺点:
策略类会增多,导致代码查看较为困难。
所有策略类都需要对外暴露。
使⽤场景:
如果在⼀个系统⾥⾯有许多类,它们之间的区别仅在于它们的⾏为,那么使⽤策略模式可以动态地让⼀个对象在许多⾏为中选择⼀种⾏为。
⼀个系统需要动态地在⼏种算法中选择⼀种。
如果⼀个对象有很多的⾏为,如果不⽤恰当的模式,这些⾏为就只好使⽤多重的条件选择语句来实现。
⽰例springboot推荐算法
场景说明:
- 此处为导出功能,此时需要根据场景导出不同的数据
1. 创建策略接⼝
public interface ExportStrategy {
default void execute() {};
default void execute(Object o) {};
}
2. 创建策略⼯⼚
@Service
public class ExportContextFactory {
@Autowired
private Map<String, ExportStrategy> contextStrategy = new ConcurrentHashMap<>();
public ExportStrategy get(String source) {
ExportStrategy exportStrategy = (source);
if (Objects.isNull(exportStrategy)) {
throw new IllegalArgumentException();
}
return exportStrategy;
}
}
3.多场景实现
@Component("demo1")
public class Demo1 implements ExportStrategy {
@Override
public void execute() {
// do something
}
}
@Component("demo2")
public class Demo2 implements ExportStrategy {
@Override
public void execute(Object o) {
/
/ do something
}
}
4. 调⽤
@Autowired
private ExportContextFactory exportContextFactory; @Test
public void tjIntegral() {
<("demo1").execute();
Object o = new Object();
<("demo2").execute(o); }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论