虽然已经出来工作将近一年了但是,还没有真正去了解过设计模式,但是设计模式一直存在自己的脑海中。去写一些复杂的业务逻辑的时候,老是再想有没有比较好的办法去解决这个问题,有的去想设计接口,然后去实现,有的时候去封装,有的时候去分层,通过mvc 什么之类的,但是最终还没有形成一个比较好的思维。 闲话不多说了。
今天就简单的说下我自己理解什么是所谓的状态模式,状态模式 就是将不同的状态封装到一个一个的对象中去。不然他与外界接触,这样可以降低程序的耦合度,说到耦合度问,其实我们编写好的程序,好的代码。就是耦合度较低,内聚行较强的程序,代码。让程序不依赖于具体的细节(所谓的细节也就是程序的实现部分,说白了也就是接口的实现的具体类),让程序依赖于的抽象(接口或抽象类)。因为程序的细节是很容易改变的,例如今天可能让你标题显示红色,明天说显示蓝色,后天又说其实字体能不能调大一下。抽象就是方法的定义,抽象的东西 在需求不变的情况下。基本上不会有大的变化,也就是平时一说所谓的面相接口抽象编程。一些框架中所谓的依赖反转之类的理论。呵呵 又扯远了。。。 回到主题状态模式
状态模式就是将对象的不同的行为封装在不同的对象之中,每一个状态对象都实现一个状态接口。状态模式是让一个对象在其内部状态改变的时候,其行为也随之改变。
状态模式所涉及到的角色有:
环境角色: 定义客户端感兴趣的接口,并且保留一个具体状态类的实例。
抽象状态(state)角色:定义一个接口,用以封装环境对象的一个特定所对应的行为。
具体状态角色:每一个具体状态类都实现了抽象状态(state)
java 代码
package com.yang.state;
/**
* 定义一个状态接口
* @author Administrator
*
*/
public interface IState {
void handle();
}
状态的实现A B C 我就不一一贴出来了
public class AState implements IState {
public void handle() {
System.out.println("------------->AState");
}
}
环境类 定义客户端感兴趣的接口
public class StateContext {
private IState iState;
public StateContext(IState iState) {
super();
this.iState = iState;
}
public StateContext() {
super();
}
public IState getiState() {
return iState;
}
public void setiState(IState iState) {
this.iState = iState;
}
public void request(){
iState.handle();
}
}
建一个测试类
public class TestState {
/**
* @param args
*/
public static void main(String[] args) {
StateContext stateContext = new StateContext();
IState iState = null;
int a = 7;
if(a>3&&a<8){
iState = new AState();
}
else if(a>8&&a<9){
iState = new BState();
}
else if(a>9&&a<16){
iState = new CState();
}
stateContext.setiState(iState);
stateContext.request();
}
}
运行结果
这样我就可以把复杂的判断里面的处理的业务逻辑代码抽取出来了。。。。。