设计模式策略模式(StrategyPattern)

核心模块:抽象策略类、具体策略类、环境类
所有代码请访问: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开始超频
游戏策略。。。随时电量报警
正常策略。。。
正常策略。。。爱干啥干啥


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值