策略模式(strategy Pattern)主要运用在多个算法中,使用者无需知道内部实现,只需要传递不同的参数,根据不同参数调用不同策略方法,比如一种场景支付功能,支付中有微信支付和支付宝支付。
1、创建一个接口
package com.poison.strategy;
/**
* @author poison
* @date 6/5/2022
* @Description 策略接口
**/
public interface IStrategy {
/**
* 执行方法
*/
public void operate();
}
首先创建一个策略接口,然后提供一个方法,后面每个策略都会实现这个方法。
2、支付宝的支付策略
package com.poison.strategy;
/**
* @author poison
* @date 6/5/2022
* @Description 支付宝支付策略
**/
public class AlipayStrategy implements IStrategy {
@Override
public void operate() {
System.out.println("支付宝支付 *** 作");
}
}
3、微信的支付策略
package com.poison.strategy;
/**
* @author poison
* @date 6/5/2022
* @Description
**/
public class WePayStrategy implements IStrategy {
@Override
public void operate() {
System.out.println("微信支付");
}
}
如上直接创建子类去实现策略接口,然后在子类中写好他具体执行的方法,每个子类是一种执行效果
4、提供一个装载所有子类的类
package com.poison.strategy;
import java.util.HashMap;
import java.util.Map;
/**
* @author poison
* @date 6/5/2022
* @Description 对外提供的 *** 作方法
**/
public class Context {
private static Map<String,IStrategy> strategyMap=new HashMap<>();
static {
strategyMap.put("支付宝", new AlipayStrategy());
strategyMap.put("微信", new WePayStrategy());
}
public static void operate(String strategyName) {
strategyMap.get(strategyName).operate();
}
}
这里使用map去装,实际还可以提供一个构造方法传递不同策略类来实现
下面是使用方法
package com.poison.strategy;
/**
* @author poison
* @date 6/5/2022
* @Description
**/
public class StrategyTest {
public static void main(String[] args) {
Context.operate("支付宝");
}
}
总结执行上面代码会输出"支付宝支付 *** 作"
由此可以看到策略模式高内聚低耦合的特点也表现出来了,还有一个就是扩展性,也就是 OCP 原则,策略类可以继续增加下去,只要修改 Context.java 创建子类就可以了,所以这个可以从某种意义上替代if-else加大代码可读性,缺点就是,会多很多的类。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)