策略模式实战

概念

策略模式是准备一组算法,并将这组算法封装到一系列的策略类里面,作为一个抽象策略类的子类。策略模式的重心不是如何实现算法,而是如何组织这些算法,从而让程序更加灵活,具有更好的维护性和扩展性。

策略模式的主要角色:

抽象策略(Strategy)类:定义了一个公共的接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或者抽象类实现。

具体策略类:实现抽象策略定义的接口,提供具体的算法实现。

环境(Context)类:持有一个策略类的引用,最终给客户端调用。

实例

策略模式的结构很简单,而spring的bean注入特性让我们在spring 框架中使用策略模式很方便,在spring中,对于同一类bean不同的别名是可以注入到一个map中或者list中的,下面的代码演示了如何在spring中方便的使用策略模式

先定义一个抽象父类:

java 复制代码
public interface Message {

    /**
     * 抽象策略
     */
    String test(String test);

}

再定义不同的实现类

java 复制代码
@Service("testA")
public class TestA implements Message {
    @Override
    String test(String test) {
        return "testA:"+test;
    }
}

@Service("testB")
public class TestB implements Message{
    @Override
    String test(String test) {
        return "testB:"+test;
    }
}

@Service("testC")
public class TestC implements Message{
    @Override
    String test(String test) {
        return "testC:"+test;
    }
}

然后在环境类中使用这些策略

java 复制代码
@Service
public class Subject{
    @Autowired
    Map<String,Message> messageStrategy

    public void check(){
       Message message= messageStrategy.get("testB")
       System.out.print(message.test())
    }
}

优点

● 在spring中使用该模式可以减少条件分支的代码量,而且它的扩展性也很好。

● 策略模式提供了对开闭原则 (软件实体应当对扩展开放,对修改关闭)的完美支持,可以在不修改原代码的情况下,灵活增加新算法

● 策略模式把算法的使用放到环境类中,而算法的实现移到具体的策略类中,使算法的使用和实现分开,降低了耦合度。

● 策略模式可以提供相同行为的不同实现,客户可以根据不同时间或者空间要求选择不同的。

相关推荐
枫叶落雨22214 小时前
策略模式实战
策略模式
回忆2012初秋1 天前
策略模式完整实现:物流价格计算引擎
策略模式
x-cmd3 天前
macOS 内存模型深度解析 | x free 设计哲学
linux·macos·内存·策略模式·free·x-cmd
互联网散修3 天前
零基础鸿蒙应用开发第二十九节:策略模式重构电商促销系统
重构·策略模式·鸿蒙零基础入门
无籽西瓜a3 天前
【西瓜带你学设计模式 | 第十五期 - 策略模式】策略模式 —— 算法封装与动态替换实现、优缺点与适用场景
java·后端·设计模式·软件工程·策略模式
互联网散修4 天前
零基础鸿蒙应用开发第二十八节:商品排序体系之工厂与策略模式
策略模式·鸿蒙
stevenzqzq4 天前
架构设计深度解析:策略模式 + 抽象工厂在UI适配中的高级应用
ui·策略模式
tiger从容淡定是人生8 天前
可审计性:AI时代自动化测试的核心指标
人工智能·自动化·项目管理·策略模式·可用性测试·coo
都说名字长不会被发现9 天前
模版方法 + 策略模式在库存增加/扣减场景下的应用
策略模式·模板方法模式·宏命令·策略聚合·库存设计
默|笙9 天前
【Linux】进程概念与控制(2)_进程控制
java·linux·策略模式