Android设计模式之策略模式详解
发布时间 - 2026-01-11 02:51:48 点击率:次策略模式

一个功能的效果,有不同的算法与策略,根据不同的选择选择不同的结果。
简单来说,只要你写过程序就用过策略模式,不要说没用过,难道if-else(switch)没用过吗…..
if-else在其实就是一个策略模式的体现,根据不同的选择处理不同的结果。
问题
如果把所有的方法全部用if-else(switch)来处理,从功能上说没问题,但是冲代码层面的维护与使用来说,if-else多了之后会让类变的过于庞大,阅读不利,修改困难
解决问题
使用策略模式,定义统一接口,每一个不同的功能(if-else)实现接口做一个具体类,外部调用具体类来达到不同的结果。
使用场景
同一个问题,有不同的解决方案
一个类有多个if-else的判断处理结果
封装SDK时上层处理结果返回的情况,调用者关心结果,不关注实现过程
列入Android源码中的动画的TimeInterpolator,ListView的适配器
代码实现
有一个商品售卖,在售卖过程中,要根据不同的用户给予不同的价格(半价,8折,7折等等),在知道用户的前提下,如何直接给予价格呢?
(一)价格接口的实现
public interface PriceStrategy {
int setPrice(int price);
}
(二)实现具体的价格类
7折:
public class seventPriceStrategy implements PriceStrategy {
@Override
public Double setPrice(int price) {
return 0.7 * price;
}
}
5折:
public class HalfPriceStrategy implements PriceStrategy {
@Override
public Double setPrice(int price) {
return 0.5 * price;
}
}
(三)价格算法管理类
public class PriceAlgorithm {
private PriceStrategy priceStrategy;
public PriceStrategy getPriceStrategy() {
return priceStrategy;
}
public void setPriceStrategy(PriceStrategy priceStrategy) {
this.priceStrategy = priceStrategy;
}
public Double getPrice(int price) {
if(priceStrategy!=null){
return priceStrategy.setPrice(price);
}
return null;
}
}
传入具体的实现类,获取返回接口
(四)调用方式
PriceAlgorithm priceAlgorithm = new PriceAlgorithm();
priceAlgorithm.setPriceStrategy(new HalfPriceStrategy());
System.out.print("\n" + "1块钱" + "5折后的价格:" + String.valueOf(priceAlgorithm.getPrice(1)));
PriceAlgorithm priceAlgorithm2 = new PriceAlgorithm();
priceAlgorithm2.setPriceStrategy(new seventPriceStrategy());
System.out.print("\n" + "2块钱" + "7折后的价格:" + String.valueOf(priceAlgorithm2.getPrice(2)));
(五)显示结果
1块钱5折后的价格:0.5
2块钱7折后的价格:1.4
总结
使用策略模式之后的维护只需要维护具体的实现类,如果有新增的方式,只需要扩展实现具体类即可,便于维护使用。
github代码地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 设计模式
# 策略模式
# Android源码学习之单例模式应用及优点介绍
# android设计模式之单例模式详解
# Android 单例模式 Singleton 简单实例设计模式解析
# android开发设计模式之——单例模式详解
# Android单例模式的几种方法总结
# Android源码学习之观察者模式应用及优点介绍
# android基础教程之夜间模式实现示例
# Android开发中的MVC设计模式浅析
# Android设计模式系列之组合模式
# Android设计模式系列之工厂方法模式
# Android开发中的单例模式应用详解
# 只需要
# 没用过
# 多个
# 只要你
# 会让
# 做一个
# 解决问题
# 用过
# 上说
# 写过
# 大家多多
# 管理类
# 过程中
# 有一个
# 前提下
# 调用者
# 不关注
# brush
# class
# pre
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel如何实现数据库事务?(DB Facade示例)
如何快速辨别茅台真假?关键步骤解析
Laravel怎么上传文件_Laravel图片上传及存储配置
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
Laravel如何与Inertia.js和Vue/React构建现代单页应用
想要更高端的建设网站,这些原则一定要坚持!
如何实现建站之星域名转发设置?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
用yum安装MySQLdb模块的步骤方法
Python并发异常传播_错误处理解析【教程】
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
教你用AI润色文章,让你的文字表达更专业
香港服务器租用费用高吗?如何避免常见误区?
nodejs redis 发布订阅机制封装实现方法及实例代码
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
Java遍历集合的三种方式
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Laravel API资源类怎么用_Laravel API Resource数据转换
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
C#如何调用原生C++ COM对象详解
Laravel如何配置任务调度?(Cron Job示例)
如何在阿里云香港服务器快速搭建网站?
如何在IIS中新建站点并配置端口与物理路径?
如何在Ubuntu系统下快速搭建WordPress个人网站?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
详解Android图表 MPAndroidChart折线图
JavaScript如何实现继承_有哪些常用方法
HTML 中动态设置元素 name 属性的正确语法详解
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
什么是javascript作用域_全局和局部作用域有什么区别?
如何在阿里云虚拟主机上快速搭建个人网站?
中山网站推广排名,中山信息港登录入口?
在线制作视频的网站有哪些,电脑如何制作视频短片?
PythonWeb开发入门教程_Flask快速构建Web应用

