设计模式之状态模式
来源:互联网 发布:mmd动作数据导入maya 编辑:程序博客网 时间:2024/05/22 02:15
最近在看阿里巴巴java开发手册,看到控制语句时,发现这么一点。
如果If else 越过三层,改为状态设计模式。官方为表达如下:
当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。另外如果业务需求某项业务有多个状态,通常都是一些枚举常量,状态的变化都是依靠大量的多分支判断语句来实现,此是应该考虑将每一种业务状态定义为一个State的子类。(好像不太明白)
(书上写的)
beign
比如有这 么一个需求,判断myColor是什么,然后打印中文颜色
PS:(举例简单,不要说写一个配置文件,因为是为学习)
这么写,连面向对象思维都没有。先改一版。
新建一个myColor 类
这样有点意思了。还是好傻,逻辑判断还是写死的,如果多了一个颜色还得再去改原来已经能运行成功的代码,这样在项目里就会有风险。
正确状态模式来了
首先把状态提成一个类。父类就是MyColor 抽象类 一个接口
接口执行了一个动作 ,有一个参数Context
Context为 环境类,就是当前code 是什么呀……
分支类1RedColor
在里面判断如果code 为 red 就说我是红色,不是,就将当前环境里面的类,认为是绿色。就如同
if("red".equals(code)){}else if("green".equals(code)) …………
分支2 GreenColor
同RedColor一样。
运行
环境类,预制一个状态为红色类,传过来的code 为 Green 运行到RedMyColor 里面,不等于 "red"
又运行到GreenMyColor类里面 等于green 打印出来。……
如果这个时候又多了一个状态,蓝色,我建立一个蓝色类,类推.
(但是好像还得修改 BlackMyColor类) 这样就不太好了。再想想办法。我也在学习中。可能这个例子不太适合状态模式。
如果是这样,好像更适合了。
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之--状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 【设计模式】之状态模式
- window10 编译安装opencv3.2+contrib
- Red Hat 开机启动关闭防火墙等
- as 相关gradle配置
- 经典搜索-nefuoj1205-和为k
- struts2中Date日期转换失败
- 设计模式之状态模式
- JAVA——java中类的public class与class的区别详解
- linux下solr6.4通过虚拟机连接mysql数据库导入数据查询
- 【学无止境】 基于ThinkPHP的OAuth2.0实现 ----OAuth2.0 个人学习笔记 Two
- 1011. A+B和C (15) PAT
- FileWriter字符流写入缓存限制
- javascript中函数的5个高级技巧
- 再简单的页面都找不到了+jsp收action中的传值报错
- Java的native方法