概述:
什么是策略模式?
假如我们需要修理一个物品,我们可能需要螺丝刀,扳手,锤子等工具。
假如我们需要去旅游,可能需要乘坐飞机,火车,汽车等。
假如我们需要计算一个答案,可能需要用到加,减,乘,除等。
那么按照常规的方式,可能会用if,else,switch来进行一下的条件判断操作,缺点在于代码和环境类(当前类)写到了一起,
那么耦合性就很高,不利于维护,代码规则也是高内聚,低耦合,长话短说,直接上代码,看完就明白了。
可以定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。
代码:
策略接口类
/*
* 修理策略接口
*/
public interface RepairStrategy {
void repair();
}
策越类
/**
* 扳手修理
* @author liuchaojun
*
*/
public class BanshouRepair implements RepairStrategy {
@Override
public void repair() {
// 修理具体方法
System.out.println("扳手具体修理。。。。。。");
}
}
/**
* 锤子修理
* @author liuchaojun
*
*/
public class ChuiziRepair implements RepairStrategy{
@Override
public void repair() {
// 修理具体方法
System.out.println("锤子具体修理。。。。。。");
}
}
/**
* 螺丝刀修理
* @author liuchaojun
*
*/
public class LuosidaoRepair implements RepairStrategy {
@Override
public void repair() {
// 修理具体方法
System.out.println("螺丝刀具体修理。。。。。。");
}
}
环境类(当前类)
/**
* 环境类,当前类
* @author liuchaojun
*
*/
public class Repair {
private RepairStrategy repairStrategy;
public Repair(RepairStrategy repairStrategy) {
this.repairStrategy = repairStrategy;
}
//修理物品
void repairGood(){
repairStrategy.repair();
}
public static void main(String[] args) {
Repair repair1 = new Repair(new BanshouRepair());
repair1.repairGood();
Repair repair2 = new Repair(new ChuiziRepair());
repair2.repairGood();
Repair repair3 = new Repair(new LuosidaoRepair());
repair3.repairGood();
}
}
结果:
小结:
优点: 1.解耦性,避免使用了if else 等条件语句。
2.如果需要加一种策略,也只需要增加一个策略类即可。
缺点: 1.如需使用其中策略,必须知道其所有的策略类有哪些。
2.策略方式一多,会产生很多的策略类。