关于java:深入浅出设计模式策略模式

8次阅读

共计 1293 个字符,预计需要花费 4 分钟才能阅读完成。

1. 策略模式介绍

2. 用代码演示策略模式

3. 总结

4. 在 spring 源码中,策略模式的利用

1. 策略模式介绍

定义

策略模式,
1)定义算法族,别离封装起来,让他们之间能够互相转化,此模式让算法独立于应用算法的客户。
2)这算法体现了几个设计准则,
第一、把变动的代码从不变的代码分离出来;
第二、针对接口编程而不是针对具体类(定义了策略接口)
第三、多用组合 / 聚合,少用继承。

2)简略地说,
咱们再拿积分需要举例(积分需要真的能够套用各种设计模式,所以大家接到这类需要的时候,千万别用 if else 这种写法来实现整个积分需要,笔者刚出大学的时候,工作第二个月接到的就是积分需要,过后就用了工厂 + 模板办法 + 策略模式进行实现。)

假如咱们当初在实现工作处分积分的时候,分了很多种工作类型,别离有不同的处分算法,这个时候咱们就能够应用策略模式。

2. 用代码演示策略模式

咱们先定义一个算法的抽象类模型:

public interface IIntegralAction {
    // 减少 / 扣除积分前的查看操作,如查看是否开户,检查用户是否异样,查看处分 / 应用数是否异样等等
    void preCheck(String userId);
    // 执行具体的增减逻辑
    void excute(String userId);
    // 执行后置逻辑,如更新数据工夫等等操作
    void after(String userId);
}

而后,咱们就能够依据处分积分的算法逻辑不一样,来实现这个接口。

再定义一个抽象类,来实现这个形象接口,并写好前置和后置的逻辑,设定好调用程序。

public class Action101 implements IIntegralAction{
    @Override
    public void preCheck(String userId) {// 查看逻辑}

    @Override
    public void excute(String userId) {// 执行逻辑}

    @Override
    public void after(String userId) {// 后置解决逻辑,比方更新工夫}
}

而后进行编写就能够了。

3. 总结

策略模式就是一种封装一系列算法的办法,每一种算法一个类,所有的这些类实现的都是同一类型的工作,只是实现不同,它能够以雷同的形式调用所有的算法,缩小了各种算法类与应用算法类之间的耦合。

咱们可能感觉它和之前介绍的模板办法设计模式有点类似,其实它们的区别在于:
模板办法设计模式中,定义算法步骤的主题在形象的父类中
策略模式中,调用模板办法的主题则在客户端
而在理论编程中,因为各个具体策略实现类之间不免存在一些雷同的逻辑,为了防止反复的代码,咱们经常应用抽象类来负责 Strategy 的角色,在外面封装公共的代码,因而,在很多利用的场景中,在策略模式中个别会看到模版办法模式的影子。

4. 在 spring 源码中,策略模式的利用

咱们晓得在 spring 中,咱们要应用容器治理对象,个别都要先定义信息,可能有 xml 的,可能有注解的,可能有 json 的:

这个时候 spring 先回把配置文件读取到容器外面去,然而不同的文件读取形式不同,这个时候就应用了策略模式。定义一个形象的读取办法,而后采纳不同的实现。

正文完
 0