JAVA设计模式之状态模式(state)
2020-05-23 16:06:59来源:博客园 阅读 ()
JAVA设计模式之状态模式(state)
状态模式:
- 根据状态决定动作
- 当动作一定但是状态可扩展适合使用状态模式
- 当动作变化不适合
- 当状态不会扩展也没有必要使用使用传统的switch即可。
先看一个没有使用状态模式的例子:
package com.srr.dp.state; /** * 我的女朋友有很多种状态 * 当给我的女朋友添加新的状态的时候下面所有方法的swith语句中都需要添加新的分支判断 * 简而言之,这种实现方式当增加新的状态时非常不方便 */ public class GirFriend { private String name; private enum State {HAPPY,NORMAL} private State state; private void smile(){ switch (state){ case HAPPY: System.out.println("哈哈哈大笑"); break; case NORMAL: System.out.println("微微一笑"); default: System.out.println(); } } private void cry(){ switch (state){ case HAPPY: System.out.println("笑中带泪,感动的哭泣"); break; case NORMAL: System.out.println("哇哇哭泣"); break; default: System.out.println(); } } private void say(){ switch (state){ case HAPPY: System.out.println("侃侃而谈,风趣幽默"); break; case NORMAL: System.out.println("沉默寡言,很少说话"); default: System.out.println(); } } }
使用状态模式之后代码如下:
package com.srr.dp.state; /** * 状态抽象类 */ abstract public class State { abstract void smile(); abstract void cry(); abstract void say(); } package com.srr.dp.state; /** * 女朋友的正常状态 */ public class NormalState extends State { @Override void smile() { System.out.println("微微一笑"); } @Override void cry() { System.out.println("哇哇哭泣"); } @Override void say() { System.out.println("沉默寡言,很少说话"); } } package com.srr.dp.state; /** * 女朋友高兴状态 */ public class HappyState extends State { @Override void smile() { System.out.println("哈哈哈大笑"); } @Override void cry() { System.out.println("笑中带泪,感动的哭泣"); } @Override void say() { System.out.println("侃侃而谈,风趣幽默"); } } package com.srr.dp.state; /** * 当添加新的状态的时候只需要添加新的状态类继承抽象state类 */ public class GirFriend2 { private String name; private State state; public GirFriend2(String name,State state){ this.name = name; this.state = state; } public void smile(){ state.smile(); } public void cry(){ state.cry(); } public void say(){ state.say(); } } package com.srr.dp.state; /** * 测试类 */ public class T { public static void main(String[] args) { State state = new HappyState(); GirFriend2 girFriend = new GirFriend2("程潇",state); girFriend.smile(); girFriend.cry(); girFriend.say(); } }
写到这里当我女朋友添加一种新的状态的时候只需要添加一个新的状态类继承抽象state类即可。
运行结果:
原文链接:https://www.cnblogs.com/sx-bj-srr/p/state.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash