核心模块:抽象策略类、具体策略类、环境类
所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git
使用场景:动态的选择算法,不希望客户端知道复杂的与算法相关的数据结构;提高保密性;
优点:符合opc,提供了可变算法分离成类,而不用在继续继承本类来写
缺点:细小的变化都将导致增加一个策略类;
注意:与状态模式区别,状态模式中,子类要切换状态操作,这里不同的策略做同一种工作,状态模式不同的状态做不同的工作
/**
* Created by tory on 2017/12/29.
* 策略模式,共同的策略基类,各个子策略封装不同的算法,达到方便切换算法的目的
*/
public class StrategyPattern {
public static void main(String [] args){
StrategyManager sm = new StrategyManager();
sm.setStragegy(new LowPowerStrategy());
sm.work();
sm.setStragegy(new LowMemoryStrategy());
sm.work();
sm.setStragegy(new LowStorageStrategy());
sm.work();
sm.setStragegy(new GameStrategy());
sm.work();
sm.setStragegy(new NormalStrategy());
sm.work();
}
}
//虚拟策略类
abstract class Stragegy{
abstract public void work();
}
//Concrete具体策略类
class LowPowerStrategy extends Stragegy{
@Override
public void work() {
System.out.println("低电量策略。。。");
System.out.println("低电量策略。。。关闭蓝牙");
System.out.println("低电量策略。。。降低屏幕亮度");
System.out.println("低电量策略。。。禁止投屏幕");
System.out.println("低电量策略。。。限制cpu速率");
}
}
//Concrete具体策略类
class LowStorageStrategy extends Stragegy{
@Override
public void work() {
System.out.println("低存储策略。。。");
System.out.println("低存储策略。。。提示用户存储空间不足");
System.out.println("低存储策略。。。限制正在运行应用个数为5");
System.out.println("低存储策略。。。删除用户透明的缓存");
System.out.println("低存储策略。。。禁止sd卡有新图片音频视频存入");
}
}
class LowMemoryStrategy extends Stragegy{
@Override
public void work() {
System.out.println("低内存策略。。。");
System.out.println("低内存策略。。。提示用户删除一些不用的应用");
System.out.println("低内存策略。。。允许程序崩溃");
System.out.println("低内存策略。。。开始GC内存收集机制");
System.out.println("低内存策略。。。尝试杀掉非必须的后台进程和服务");
}
}
class GameStrategy extends Stragegy{
@Override
public void work() {
System.out.println("游戏策略。。。");
System.out.println("游戏策略。。。减少非游戏进程的网络ping数量");
System.out.println("游戏策略。。。尝试杀掉非必须的后台进程和服务");
System.out.println("游戏策略。。。cpu开始超频");
System.out.println("游戏策略。。。随时电量报警");
}
}
class NormalStrategy extends Stragegy{
@Override
public void work() {
System.out.println("正常策略。。。");
System.out.println("正常策略。。。爱干啥干啥");
}
}
//Context环境类
class StrategyManager{
Stragegy stragegy;
public void setStragegy(Stragegy stragegy){
this.stragegy = stragegy;
}
public void work(){
stragegy.work();
}
}
内容打印
Hello World!
低电量策略。。。
低电量策略。。。关闭蓝牙
低电量策略。。。降低屏幕亮度
低电量策略。。。禁止投屏幕
低电量策略。。。限制cpu速率
低内存策略。。。
低内存策略。。。提示用户删除一些不用的应用
低内存策略。。。允许程序崩溃
低内存策略。。。开始GC内存收集机制
低内存策略。。。尝试杀掉非必须的后台进程和服务
低存储策略。。。
低存储策略。。。提示用户存储空间不足
低存储策略。。。限制正在运行应用个数为5
低存储策略。。。删除用户透明的缓存
低存储策略。。。禁止sd卡有新图片音频视频存入
游戏策略。。。
游戏策略。。。减少非游戏进程的网络ping数量
游戏策略。。。尝试杀掉非必须的后台进程和服务
游戏策略。。。cpu开始超频
游戏策略。。。随时电量报警
正常策略。。。
正常策略。。。爱干啥干啥