设计模式之状态模式

来源:互联网 发布: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类) 这样就不太好了。再想想办法。我也在学习中。可能这个例子不太适合状态模式。

设计模式之状态模式

如果是这样,好像更适合了。

0 0