当前位置: 首页 > news >正文

珠海网站建设黄荣首页优化排名

珠海网站建设黄荣,首页优化排名,wordpress文章显示字数,鹤岗做网站公司函数式接口实现策略模式 1.案例背景 我们在日常开发中,大多会写if、else if、else 这样的代码,但条件太多时,往往嵌套无数层if else,阅读性很差,比如如下案例,统计学生的数学课程的成绩: 90-100分&#…

函数式接口实现策略模式

1.案例背景

我们在日常开发中,大多会写if、else if、else 这样的代码,但条件太多时,往往嵌套无数层if else,阅读性很差,比如如下案例,统计学生的数学课程的成绩:

  • 90-100分,打印【优秀A+】
  • 80-90分,打印【优秀A-】
  • 70-80分,打印【中等B+】
  • 60-70,打印【中等B-】
  • 60及以下,打印【同学还需努力!】
    我们会写如下代码:
 // 0<=grade<=100if (grade > 90 && grade <= 100) {System.out.println("【优秀A+】");} else if (grade > 80 && grade <= 90) {System.out.println("【优秀A-】");} else if (grade > 70 && grade <= 80) {System.out.println("【中等B+】");} else if (grade > 60 && grade <= 70) {System.out.println("【中等B-】");} else {System.out.println("【同学还需努力!】 ");}

毋庸置疑,上述代码完全正确,可以满足业务要求,但考虑到未来业务的扩展性与代码的可阅读性,大量的if、else语句使代码不够优雅,随着后续业务的增加,分类可能越来越细,岂不是要嵌套成百上千层。接下来考虑使用函数式接口+策略模式的思想完成代码改造。

2.代码改造

2.1 创建函数式策略接口

创建自定义函数式策略接口:

/*** 函数式策略接口*/
@FunctionalInterface
public interface GradeFuncInterface {/*** 打印成绩方法* @param grade 实际成绩*/void printStudentGrade(Integer grade);
}

2.2 创建策略方法类

创建策略方法类,相关注释已在代码中标注:

import java.util.HashMap;
import java.util.Map;
import java.util.function.Predicate;/*** 策略方法*/
public class GradeStrategy {/*** 存储策略逻辑* 这里使用到了另外一个JDK提供的函数式接口,Predicate,里面几个方法很简单,大家感兴趣可以点进去阅读下底层源码*/private final Map<Predicate<Integer>, GradeFuncInterface> gradeMap = new HashMap<>();/*** 无参构造*/public GradeStrategy() {gradeMap.put(grade -> this.determineGrade(grade, 100, 90), ((grade) -> System.out.println("【优秀A+】")));gradeMap.put(grade -> this.determineGrade(grade, 90, 80), ((grade) -> System.out.println("【优秀A-】")));gradeMap.put(grade -> this.determineGrade(grade, 80, 70), ((grade) -> System.out.println("【中等B+】")));gradeMap.put(grade -> this.determineGrade(grade, 70, 60), ((grade) -> System.out.println("【中等B-】")));gradeMap.put(grade -> this.determineGrade(grade, 60, -1), ((grade) -> System.out.println("【同学还需努力!】")));}/*** 判断成绩的区间* @param grade 实际成绩* @param maxGrade 最大成绩* @param minGrade 最小成绩* @return*/private boolean determineGrade(Integer grade, Integer maxGrade, Integer minGrade) {if (grade > minGrade && grade <= maxGrade) {return true;}return false;}/*** 获取成绩区间* @param grade*/public void getStudentGrade(Integer grade) {// 遍历策略mapfor (Map.Entry<Predicate<Integer>, GradeFuncInterface> entry : gradeMap.entrySet()) {if (entry.getKey().test(grade)) {entry.getValue().printStudentGrade(grade);return;}}System.out.println("学生成绩为:" + grade + "无对应期间成绩,请维护!");}
}

3. 测试

3.1 创建测试类

测试类代码如下:

public class StrategyTest {public static void main(String[] args) {GradeStrategy gradeStrategy = new GradeStrategy();gradeStrategy.getStudentGrade(98);gradeStrategy.getStudentGrade(88);gradeStrategy.getStudentGrade(78);gradeStrategy.getStudentGrade(68);gradeStrategy.getStudentGrade(58);gradeStrategy.getStudentGrade(128);gradeStrategy.getStudentGrade(-18);}}

3.2 运行结果

通过运行结果,可知输出结果正确。
在这里插入图片描述

4. 总结

通过策略模式的思想+函数式接口,我们将大量的if else判断分解出来,在调用端只需要调用策略类提供的方法,使代码更加优雅,当业务需要扩展时,我们只需要加上对应策略即可,使我们只用注重业务逻辑层的代码,让运维更加方便简洁。

备注:另外一种策略模式的使用见:工厂模式+策略模式

http://www.mmbaike.com/news/29767.html

相关文章:

  • 网站建设服务器软件韶关新闻最新今日头条
  • 美国网站建设山东疫情最新情况
  • 门户网站建设方式seo优化工具大全
  • 一般什么行业做网站的多东营网站建设哪家更好
  • 高档网站建百度网络优化推广公司
  • 吉大建设工程学院官方网站seo引擎优化外包公司
  • bl做h视频网站厦门关键词优化企业
  • 免费网站服务腾讯广告投放平台官网
  • 做下载网站赚钱郑州制作网站公司
  • wordpress评论验证码插件杭州seo营销公司
  • 袜子技术支持深圳网站建设站长
  • 顺义便宜的建站公司代运营哪家公司最靠谱
  • wordpress绿色两栏响应式主题福州seo排名优化公司
  • 坪地网站建设知乎营销平台
  • 在哪里可以学做饰品网站东莞seo排名公司
  • 网站建设的竞争对手的分析网络营销平台有哪些?
  • 网站板块怎么做seo培训教程
  • 高端论坛网站建设开发一个平台需要多少钱
  • 网站 主办单位性质 个人seo网站优化工具
  • 做单挣钱的网站免费自助建站哪个最好
  • flash做的个人网站懂得网站推广
  • 学网站开发首先学哪些基础公众号seo排名
  • 北京网站建设工作室网站搜索优化价格
  • 做网站企业 金坛长沙企业网站建设报价
  • 如何建立属于个人网站淘宝推广哪种方式最好
  • iis搭建网站怎么做前端百度搜索最多的关键词
  • 小企业网站建设平台百度推广代理赚钱
  • 国外的网页制作网站外贸找客户有什么网站
  • 闲置服务器做网站北京百度推广优化公司
  • 网站怎么自适应屏幕互联网广告代理可靠吗