** 设计模式——策略模式**
1、什么是策略模式?
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
2、案例业务实现~
案例:同学参加运动会,有不同的球类的玩法策略进行比赛,由他选择具体的策略参与~
首先建立玩法接口类
package com.design.strategy;
/**
* 玩法的接口定义
*/
public interface Play {
/**
* 具体玩的什么~
*/
void run(String name);
}
然后在添加几个具体球类实现方法~
package com.design.strategy;
/**
* 玩篮球
*/
public class BasketballPlay implements Play{
/**
* 参与玩篮球
*/
@Override
public void run(String name) {
System.out.println(name+"选择参与玩篮球策略");
}
}
package com.design.strategy;
public class FootballPlay implements Play{
/**
* 参与玩足球
*/
@Override
public void run(String name) {
System.out.println(name+"选择参与玩足球策略");
}
}
package com.design.strategy;
public class VolleyballPlay implements Play{
/**
* 参与玩排球
*/
@Override
public void run(String name) {
System.out.println(name+"选择参与玩排球策略");
}
}
再添加一个运动类,编写使用这些策略的实现方法
package com.design.strategy;
/**
* 运动类
*/
public class Movement {
/**
* 名字
*/
private String name;
public Movement(String name) {
this.name = name;
}
public void show(Play play){
play.run(name);
}
}
最后写个测试类用于测试
package com.design.strategy;
/**
* 策略模式测试主类
*/
public class StrategyMain {
/**
* 启动类
* @param args
*/
public static void main(String[] args){
Movement movement = new Movement("小明");
//输入足球策略
FootballPlay foot = new FootballPlay();
movement.show(foot);
}
}
最后演示效果图,选择了足球策略就是打印足球策略,这个是简单实现过程
设计类图
3、真实运用场景
JDK的 Comparable和Comparator类就是采用的策略模式
package java.lang;
import java.util.*;
public interface Comparable<T> {
public int compareTo(T o);
}
实现compareTo(T o)方法,添加比较的对象,具体比较的策略由Comparator来完成实现
package java.util;
import java.io.Serializable;
import java.util.function.Function;
import java.util.function.ToIntFunction;
import java.util.function.ToLongFunction;
import java.util.function.ToDoubleFunction;
import java.util.Comparators;
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}
compare(T o1, T o2)方法就是实现的比较策略~
其他大佬也写过相关这两个实现文章连接地址