策略模式
策略模式定义
对同一种行为不同的实现算法,比如:从北京到哈尔滨,可以选择乘火车、飞机、客车、自驾
策略模式使用场景
针对同一种行为,可以有多种不同的实现算法。
比如:打折方案(不同的人群不同的打折算法)、个人所得税(根据不同的收入种类,不同的个税计算算法)
策略模式源码
交通工具策略接口
package strategy;
/**
* @author : freedom
* @Description : 交通工具策略接口
* @Creation Date: 2019-11-28 7:45 上午
*/
public interface Itransportation {
/**
* 交通方式
*/
void transport();
}
火车策略实现类
package strategy;
/**
* @author : freedom
* @Description : 火车策略
* @Creation Date: 2019-11-28 7:48 上午
*/
public class Train implements Itransportation {
/**
* 交通方式
*/
@Override
public void transport() {
System.out.printf("乘坐火车从北京到哈尔滨");
}
}
汽车策略实现类
package strategy;
/**
* @author : freedom
* @Description : 公共汽车策略
* @Creation Date: 2019-11-28 7:46 上午
*/
public class Car implements Itransportation {
/**
* 交通方式
*/
@Override
public void transport() {
System.out.printf("乘坐公共汽车从北京到哈尔滨");
}
}
策略对象持有类
package strategy;
/**
* @author : freedom
* @Description : 策略对象
* @Creation Date: 2019-11-28 7:54 上午
*/
public class Strategy {
/**
* 声明不同算法的引用
*/
private Itransportation itransportation;
/**
* 初始化不同的算法
*/
Strategy(Itransportation itransportation) {
this.itransportation = itransportation;
}
/**
* 调用不同的策略
*/
public void getTransportation() {
this.itransportation.transport();
}
}
策略模式测试类
package strategy;
/**
* @author : freedom
* @Description : 策略测试类
* @Creation Date: 2019-11-28 7:56 上午
*/
public class StrategyTest {
public static void main(String[] args) {
//new 一个环境策略对象
Strategy strategy = new Strategy(new Car());
strategy.getTransportation();
Strategy trainStrategy = new Strategy(new Train());
trainStrategy.getTransportation();
}
}
策略模式测试运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4GPwAqSh-1574899704028)(evernotecid://AAA42DFC-EC45-4768-B516-25846DA75603/appyinxiangcom/12441645/ENResource/p1892)]