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应用