策略模式(Strategy Pattern)是设计模式中的一种行为型模式,旨在定义一系列算法,将每一个算法封装起来,并使它们可以互相替换。策略模式让算法独立于使用它的客户端独立变化。
一:策略模式的组成
上下文(Context):持有对某个策略对象的引用,并且可以在运行时动态地更换策略。
策略接口(Strategy):定义一个统一的接口,以便所有具体策略类实现。
具体策略(ConcreteStrategy):实现策略接口的具体算法。
二 策略模式的结构
Strategy:策略接口,通常包含一个方法签名,所有具体策略类都实现这个方法。
public interface Strategy{ voidexecute();}
ConcreteStrategyA:具体策略A实现。
public class Concrete StrategyA implements Strategy{@Override public void execute(){ System.out.println("Executing strategy A"); }}
ConcreteStrategyB:具体策略B实现
public class ConcreteStrategyB implements Strategy{@Override public void execute(){ System.out.println("Executing strategy B"); }}
Context:上下文类,持有对策略对象的引用并委托策略对象来执行算法。
public class Context{privateStrategy strategy;publicContext(Strategy strategy){this.strategy = strategy; }public void setStrategy(Strategy strategy){this.strategy = strategy; }public void executeStrategy(){ strategy.execute(); }}
具体项目中使用示例:
第一步:某房屋隐患巡查分为周期和临时巡查两种类型,我们建立一个通用接口,这个接口继承了spring的IntitalizingBean接口,用于在spring容器初始化实例完成之后,将对象放入工厂缓存。
图1
第二步:工厂类用于存储实现通用接口的实例对象,里面有两个方法,gethander方法就是根据具体的实例对象类型获取实例对象,register方法注册通用接口实例类到缓存对象中,此方法在通用接口实现类中会调用。
图2
第三步:建立具体周期巡查任务执行类,实现第一步通用接口方法,同时将此类通过工厂的注册方法注册工厂类中
图3
第四步:建立具体临时巡查任务执行类,实现第一步通用接口方法,同时将此类通过工厂的 注册方法注册工厂类中(类似于第三步)
图4
第五步:用具体类型巡查任务的方法,通过工厂类根据不同的任务类型获取对应的具体实例,然后调用实例方法。