开篇前言

遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(*∩_∩*)′,是否想在双十一摆脱单身,和亲爱的ta牵手漫步,在寒风中紧紧相拥,都说艺术来源于生活,却高于生活,作为人类智慧的结晶设计模式,她蕴藏着丰富的撩妹技术,今天这篇博文,小编主要介绍状态模式中的撩妹神技。

什么是状态模式

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类,状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化,一句话来说就是,当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类,我们来看一下状态模式的结构图,如下所示:

状态模式中的撩妹神技

新建项目State,新建类和类MM、Boy,编写相关的代码部分,如下所示:

package com.dp.state;

public class MM {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

Boy的代码如下所示:

package com.dp.state;

public class Boy {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

小伙伴们都知道MM的状态是非常不固定的,恰似六月的天,像娃娃的脸,说变就变,MM是个易变得动物,前一个月还海誓山盟,后一个月擦肩而过,形同陌路,作为MM来讲,她会有一些方法,会哭、会笑、会说,编写代码,如下所示:

package com.dp.state;

public class MM {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public void smile(){

}

public void cry(){

}

public void say(){

}

}

MM在不同状态的时候,这些方法的实现是不相同的,状态决定方法该如何执行。这个时候我们就可以疯传一个state,新建类MMState,代码如下所示:

package com.dp.state;

public abstract class MMState {

public abstract void smile();

public abstract void cry();

public abstract void say();

}

MMState这个类有一些具体的子类,比如haapy的状态,如下所示:

package com.dp.state;

public class MMHappyState extends MMState {

@Override

public void smile() {

// TODO Auto-generated method stub

}

@Override

public void cry() {

// TODO Auto-generated method stub

}

@Override

public void say() {

// TODO Auto-generated method stub

}

}

MM还可以有unHappy的状态,编写代码如下所示:

package com.dp.state;

public class MMUnHappyState extends MMState {

@Override

public void smile() {

// TODO Auto-generated method stub

}

@Override

public void cry() {

// TODO Auto-generated method stub

}

@Override

public void say() {

// TODO Auto-generated method stub

}

}

这个时候MM的代码就可以这样来编写,如下所示:

package com.dp.state;

public class MM {

private String name;

private MMState state = new MMHappyState();

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public void smile(){

state.smile();

}

public void cry(){

state.cry();

}

public void say(){

state.say();

}

}

这就是State模式,设计模式的区别往往是在语义上,而不是在语法上,接着我们来看一下状态模式的优缺点。

状态模式的优缺点

优点:

a、封装了转换规则。

b、枚举可能的状态,在枚举状态之前需要确定状态种类。

c、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。

d、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。

e、 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。

缺点:

a、状态模式的使用必然会增加系统类和对象的个数。

b、状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。

c、状态模式对“开闭原则”的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态;而且修改某个状态类的行为也需修改对应类的源代码。

状态模式的应用场景

a、当一个对象状态转换的条件表达式过于复杂时可以使用状态者模式。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。

b、当一个对象行为取决于它的状态,并且它需要在运行时刻根据状态改变它的行为时,就可以考虑使用状态者模式。

小编寄语:该博文小编主要介绍了设计模式中的撩妹神技之状态模式,小编从什么是状态模式、状态模式的结构图,撩妹的Demo,状态模式的优缺点以及状态模式的优缺点,不知道单身的你,有没有从小编的系列博客中受到启发呢,双十一在即,单身的你,还在等什么,赶紧行动吧`(*∩_∩*)′,或许就在你读完小编博文的时候,你和ta在转角的咖啡屋不期而遇,面对眼前的这个人,ta淡雅如风,你笑魇如花......

撩妹java代码_Java程序媛深入浅出设计模式中的撩妹神技--下篇相关推荐

  1. 撩妹java代码_Java程序媛深入浅出设计模式中的撩妹神技--中篇

    开篇前言 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(* ...

  2. 分酒问题java代码_java程序实现一个有趣的买啤酒问题

    一:问题描述 啤酒2元一瓶,4个瓶盖换一瓶啤酒,2个空瓶换一瓶啤酒,问10元能喝几瓶啤酒? 二:问题分析 针对上述问题,分两种情况:一种是有剩余空瓶和瓶盖且不够兑换的情况:另一种是当剩余瓶盖或空瓶不够 ...

  3. 设计模式中的撩妹神技--下篇

         开篇前言 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有 ...

  4. 设计模式中的撩妹神技--上篇

    开篇前言 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(* ...

  5. java重定向代码_Java程序员经典面试题集大全 (三十四)

    341. Servlet API中forward() 与redirect()的区别? 答:为实现程序的模块化,就需要保证在不同的Servlet之间可以相互跳转,而Servlet中主要有两种实现跳转的方 ...

  6. java书籍_Java程序员必看的 13 本 Java 书籍!

    原文:Java程序员必看的 13 本 Java 书籍! 作者: java技术栈 关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书! 毕竟,书是学习的海洋呢!So,J ...

  7. java句子中找单词_java程序找到一个句子中每个单词的字母数

    我想找到一个句子中每个单词的字母数.我已经尝试了几次使用几个代码,但从来没有得到它.我总是显示错误StringIndexOutOfBounds异常.我的一个代码如下:java程序找到一个句子中每个单词 ...

  8. 随机数生成java代码_Java Bullshifier –生成大量随机代码库

    随机数生成java代码 生成大量随机Java应用程序的命令行工具 您一直在等待的命令行工具. 或不. 毕竟,这是很深奥的. 无论哪种方式,它对某些人都非常有用,而对其他人来说却是一个有趣的实用程序. ...

  9. java 代码 _程序员用1.5小时写出的Java代码,让同事瞠目结舌!直呼优秀

    1.曾经不止一次在生产中见过类似这样的代码: 这有很多变种,例如用 Integer.valueOf(1). (Integer)1 之类的,那些细节都不重要.重要的是:凭空用一个 Integer 对象作 ...

最新文章

  1. 使用matlab构建一个信号、添加噪声信号并图示信号
  2. 口红竟超10000款,IT直男谁来拯救?(文末有惊吓)
  3. python数据分析工资_python3对拉勾数据进行可视化分析的方法详解
  4. python3 scrapy 教程_Scrapy 教程
  5. 执行SQL-MapperProxy.invoke()
  6. Android 第八课 创建自定义控件
  7. github 如何设置项目的语言显示
  8. iOS客户端流量统计
  9. 《代码敲不队》第九次团队作业:Beta冲刺第1天
  10. 权限角色管理学习(二)
  11. mysql 冗余字段_18.3.3 增加冗余字段
  12. VS2008SP1使用入门
  13. 输入一个三位数,再反向输出
  14. VUE动态展示表格字段
  15. matlab批量导入excel表格数据,matlab导入excel表格数据-如何用matlab读取多个excel表格数据,将每个表格数......
  16. 计算机二级office公式汇总,计算机二级Office2010Eexcel公式汇总
  17. 应用matlab仿真几类混沌电路,典型混沌电路及分析.ppt
  18. 主题模型分析漏洞趋势
  19. windows 7 x64 下的 System Call
  20. 快车道不快的现象与人类误判心理学

热门文章

  1. python爬虫抓取房产_Python爬虫一步步抓取房产信息!
  2. java毕业设计漫画网站系统源码+lw文档+mybatis+系统+mysql数据库+调试
  3. jvm分析工具:JProfiler详解
  4. mysql字符串类型时间比较大小
  5. debian、pip换源
  6. Linux命令 nohup、、>、>> 解析
  7. 最新人机对话工具:GPT4介绍(ChatGPT升级版 支持图片且更智能)
  8. 0、1取反 python
  9. linux 增加自动恩物,「4bays」窮人備份恩物! Synology DiskStation 418
  10. 面试填坑之Redis无底洞(一、Redis缓存雪崩、击穿、穿透)