android常用设计模式之策略模式

本文介绍了策略模式的概念、使用角色及场景,通过旅游出行方式选择的例子详细解释了如何在代码中实现策略模式。此外还探讨了该模式在Android开发中的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.定义

策略模式定义了一系列算法,并将一系列算法封装起来,使它们能够相互替换。

 

二.使用角色

1.用来操作策略的上下文环境

2.策略的抽象

2.具体策略实现

 

三.使用场景:

1.针对同一类问题的多种实现方式.

2.需要安全的封装多重同一类对象时,调用者不会知道算法策略的具体过程。

3.一个类有多个子类,并且在调用的时候用if或switch判断的时候。

 

四.使用举例说明

这边假如我们需要去一个地方旅游,有几种交通方式选择,然后计算每种交通方式花费的时间,

1.定义公共计算接口(抽象的策略)

public interface RouteCalculate {
    int calculate();
}

 

2.三种交通工具,具体花费时间的算法(策略的具体实现):

/**
 * 高铁
 */
public class HighSpeedCalculate implements RouteCalculate{
    @Override
    public int calculate() {
        int busTime = 1;//到高铁站的时间
        int highSpeedTime  = 5;//高铁的时间
        int waitTime = 1;//等车时间
        return busTime + highSpeedTime+waitTime;
    }
}

/**
 * 自己开车
 */
public class CarCalculate implements RouteCalculate{
    @Override
    public int calculate() {
        int carTime = 8;
        return carTime;
    }
}

/**
 * 乘坐飞机
 */
public class airplaneCalcuate implements RouteCalculate{
    @Override
    public int calculate() {
        int busTime = 1;//到机场的时间
        int airTime  = 2;//飞机的时间
        int waitTime = 2;//等飞机时间
        return busTime + airTime+waitTime;
    }

}

1.定义一个策略的上下文

public class CalculateContext {
    private RouteCalculate routeCalculate;

    public void setRouteCalculate(RouteCalculate routeCalculate) {
        this.routeCalculate = routeCalculate;
    }

    public int getTime(){
        return routeCalculate.calculate();
    }
}

 

以上就是策略模式的简单实现。

 

五.在Android中的应用:

1.在Android中属性动画的插值器就是使用的策略模式:

Animation animation = new AlphaAnimation(1,0);
    animation.setInterpolator(new AccelerateDecelerateInterpolator());
            imageView.setAnimation(animation);

            animation.start();

1.在Android的LiseView/RecyclerView 中的Adapter,可以设置不同的adapter也是使用的策略模式。

public class ListView extends AbsListView {//相当于环境类
    @Override
    public void setAdapter(ListAdapter adapter) {//设置策略,即adapter
        //其他代码略
    }
}

public interface ListAdapter extends Adapter {//抽象策略接口

}
public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {//具体策略类BaseAdapter,实现ListAdapter接口

}
public class ArrayAdapter<T> extends BaseAdapter implements Filterable, ThemedSpinnerAdapter {//具体策略类ArrayAdapter,继承BaseAdapter,即实现ListAdapter接口

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值