JAVA从入门到精通之策略模式的应用
沉沙 2019-08-07 来源 : 阅读 1350 评论 0

摘要:本篇文章探讨了JAVA从入门到精通之策略模式的应用,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了JAVA从入门到精通之策略模式的应用,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

JAVA从入门到精通之策略模式的应用


策略者模式

  我个人简单理解,策略这模式就是代替if else的一种模式。

  很简单的一个例子。比如人,人分为男人,女人,甚至不清楚性别的人。但这三种类型的人,都有不同的行为。那么我们在描述这些不同行为的时候,一般我们做法就是如下:

1 if (male) {2    //...3 } else if (female) {4    //...5 } else {6    //...7 }

  类似如上。很多个if,else进行嵌套。这样非常的难看,不优雅。如果我们用策略这模式替换,会怎么样。

策略者模式例子

  • 第一步定义一个person接口

1 public interface Person {3     void executeStrategy();4 }
  • 第二步定义person的继承类,如男人,女人等等

 1 public class MalePerson implements Person { 2     public void executeStrategy() { 3         System.out.println(""我是男性""); 4     } 5 } 6  7 public class FemalePerson implements Person { 8     public void executeStrategy() { 9         System.out.println(""我是女性"");10     }11 }12 13 public class UnknownPerson implements Person {14     public void executeStrategy() {15         System.out.println(""未知性别"");16     }17 }
  • 第三步定义一个enum类,表示可选择性。

 1 @Getter 2 public enum SexEnum { 3     MALE(""male"", ""男性""), 4     FEMALE(""female"", ""女性""), 5     UNKNOWN(""unknown"", ""未知""); 6  7     private String code; 8     private String sex; 9 10     SexEnum(String code, String sex) {11         this.code = code;12         this.sex = sex;13     }14 }
  • 最后一步定义一个策略选择器

 1 public class ContextStrategy { 2  3     private MalePerson malePerson = new MalePerson(); 4     private FemalePerson femalePerson = new FemalePerson(); 5     private UnknownPerson unknownPerson = new UnknownPerson(); 6  7     public Person getPersonStrategy(SexEnum sexEnum) { 8         if (""male"".equals(sexEnum.getCode())) { 9             return malePerson;10         } else if (""female"".equals(sexEnum.getCode())) {11             return femalePerson;12         } else {13             return unknownPerson;14         }15     }16 }
  • 最终测试如下:

 1 public class Main { 2     public static void main(String[] args) { 3  4         ContextStrategy strategy = new ContextStrategy(); 5         strategy.getPersonStrategy(SexEnum.MALE).executeStrategy(); 6         strategy.getPersonStrategy(SexEnum.FEMALE).executeStrategy(); 7         strategy.getPersonStrategy(SexEnum.UNKNOWN).executeStrategy(); 8     } 9 }10 11 // 结果如下:12 // 我是男性13 // 我是女性14 // 未知性别

  其实我们可以看到。策略选择器是传入一个Enum类,然后根据传入Enum的不同,选择了不同的继承类。从而实现了if else。优雅的过渡。

  可以看到,代码非常的优雅易懂,主代码,没有if else分支。但同时代码量多了起来。不过也很容易维护。

  总的来说,利大于弊。

      本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved