Android 策略模式

策略模式是一种针对算法的一个设计模式,将不同的算法封装在起来,并让它们可以相互替换。

如果我们在开发的时候,实现某个功能有多种算法的时候,我们应该根据实际情况去选择不同的算法来完成这项功能,比如,在听音乐的时候,定时退出的功能,有的通过时间倒计时归0退出程序,而有的是通过歌曲的数目,当听完多少首歌曲的时候自动退出程序,这个时候,在实现退出功能的时候,我们需要根据用户的选择来判断需要使用何种的算法。而策略模式正是实现这项功能的更好的设计模式,将算法独立于客户端,这样的话,让算法的变化独立于客户端的变化。

策略模式的介绍

策略模式的uml

这里写图片描述

  • Client: 客户端类
  • Strategy: 策略的抽象类
  • ConcreteStrategyA: 具体的策略实现类A,算法A
  • ConcreteStrategyB: 具体的策略实现类B, 算法B

举个栗子

需求:我们需要实现一个控制退出的程序,业务的需求已开始只是通过时间去控制退出的时间,但是后来又加了一种通过使用次数的退出的机制。这个时候我们会发现一个退出判断的操作,是有两种不同形式的生成方式。即一个操作是有不同两种算法的时候,这个时候使用strategy模式就较为合适了。

栗子的策略模式的uml图

这里写图片描述

栗子的策略模式的package图

这里写图片描述
- Client :某个方法有不同计算方式的客户端类
- ControllerExit:检查能否退出的抽象类
- TimeControllerExit: 根据时间去检查能否退出的具体类
- CountControllerExit:根据次数去检查能否退出的具体类

具体的代码

ControllerExit

public abstract class ControllerExit {

    public abstract boolean remain(long initTime,int count);

}

CountControllerExit

public class CountControllerExit extends ControllerExit {

    @Override
    public boolean remain(long initTime, int count) {

        if(--count > 0){
            return false;
        }

        return true;
    }
}

TimeControllerExit

public class TimeControllerExit extends ControllerExit{

    @Override
    public boolean remain(long initTime,int count){

        if(System.currentTimeMillis()-initTime > 200 ){
            return true;
        }

        return false;
    }
}

Client

public class Client {

    private ControllerExit exit; 

    public static void main(String[] args) {
        Client client = new Client();
        client.setControllerExit(new TimeControllerExit());
        boolean isRemain = client.checkRemain(System.currentTimeMillis(), 0);
        System.out.println("是否退出:"+isRemain);

        client.setControllerExit(new CountControllerExit());
        isRemain = client.checkRemain(System.currentTimeMillis(), 1);
        System.out.println("是否退出:"+isRemain);
    }

    public void setControllerExit(ControllerExit exit){
        this.exit = exit;
    }

    public boolean checkRemain(long initTime,int count){
        return exit.remain(initTime, count);
    }
}

运行的log图:
这里写图片描述

策略模式优缺点

优点:把具体的算法独立出来,做到算法的类和调用的类的分离。并且无论是在扩展还是修改方面都带来很好的方便,

缺点:类回增多,另外有具体的策略去实施时,客户端必须要明确知道是何种策略。并通过依赖注入的方式告诉给客户端。

总结

策略模式是一种将算法独立出客户端的模式,实现将相同的行为的有不同的具体实现策略。简言之就是将算法分离。从而达到更好的扩展性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值