java 设计模式之状态模式

 虽然已经出来工作将近一年了但是,还没有真正去了解过设计模式,但是设计模式一直存在自己的脑海中。去写一些复杂的业务逻辑的时候,老是再想有没有比较好的办法去解决这个问题,有的去想设计接口,然后去实现,有的时候去封装,有的时候去分层,通过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();
}


}



运行结果



这样我就可以把复杂的判断里面的处理的业务逻辑代码抽取出来了。。。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值