[TOC]
二十三种设计模式之策略模式
1、关于策略模式
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
环境类(Context):用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。
抽象策略类(Strategy):定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。
具体策略类(ConcreteStrategy):以Strategy接口实现某具体算法。
2、具体实现
2.1、公共接口部分
public interface PackageStrategy {
//定义所有支持的算法的公共接口
public void operatePackage();
}
2.2、具体算法实现部分
2.2.1、FirstImpl.java
public class FirstImpl implements PackageStrategy {
@Override
public void operatePackage() {
System.out.println("================== 执行了第First个方法 ==================");
}
}
2.2.2、SecondImpl.java
public class SecondImpl implements PackageStrategy {
@Override
public void operatePackage() {
System.out.println("================== 执行了第Second个方法 ==================");
}
}
2.2.3、ThirdImpl.java
public class ThirdImpl implements PackageStrategy {
@Override
public void operatePackage() {
System.out.println("================== 执行了第Third个方法 ==================");
}
}
2.3、环境部分设计
import com.nanjustar.strategy.service.PackageStrategy;
public class PackageStrategyContext {
private PackageStrategy packageStrategy;
public PackageStrategyContext(PackageStrategy packageStrategy) {
this.packageStrategy = packageStrategy;
}
public void doPackageStrategy(){
packageStrategy.operatePackage();
}
}
2.4、输出信息
public void strategy() {
PackageStrategyContext packageStrategyContext;
packageStrategyContext = new PackageStrategyContext(new FirstImpl());
packageStrategyContext.doPackageStrategy();
packageStrategyContext = new PackageStrategyContext(new SecondImpl());
packageStrategyContext.doPackageStrategy();
packageStrategyContext = new PackageStrategyContext(new ThirdImpl());
packageStrategyContext.doPackageStrategy();
}
================== 执行了第First个方法 ==================
================== 执行了第Second个方法 ==================
================== 执行了第Third个方法 ==================