java状态模式理解,状态模式之java实现

事物的发展总是伴随着状态的转换,犹如人会经历婴幼儿到青壮年。四季一年,有春的盎然,夏的炽烈,秋的多彩,冬的洁白。第三篇就从这可爱的四季开始吧。

状态模式的核心:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。

优点:封装了转换规则。缺点:状态类之间的耦合性比较强。

实现

上下文管理类

public class Context

{

private State curState;

public void process(int month)

{

this.curState.handle(month, this);

}

public void setState(State newState)

{

this.curState = newState;

}

}

状态接口类

public interface State

{

public void handle(int age, Context ctx);

}

具体实现类

public class Spring implements State

{

@Override public void handle(int month, Context ctx)

{

System.out.println("Spring: Green");

if(month >= SeasonDefine.SUMMER_BEGIN_MONTH - 1)

{

System.out.println("Change State: Spring -> Summer, Sweet Flower and SunShine");

ctx.setState(new Summer());

}

}

}

public class Summer implements State{

@Override

public void handle(int month, Context ctx)

{

System.out.println("Summer: Red");

if(month >= SeasonDefine.AUTUMN_BEGIN_MONTH - 1)

{

System.out.println("Change State: Summer -> Autumn, Bright Colors"); ctx.setState(new Autumn());

}

}

}

public class Autumn implements State

{

@Override

public void handle(int month, Context ctx)

{

System.out.println("autumn, yellow");

if(month >= SeasonDefine.WINNER_BEGIN_MONTH - 1)

{

System.out.println("Change State: Autumn -> Winner, magic snow world"); ctx.setState(new Winner());

}

}

}

public class Winner implements State

{

@Override

public void handle(int month, Context ctx)

{

System.out.println("Winner, White");

if(month >= SeasonDefine.WINNER_OVER_MONTH)

{

System.out.println("Change State: Winnder -> Spring, Happy New Year"); ctx.setState(new Spring());

}

}

}

测试

public class StatePatternDemo

{

public static void main(String[] args)

{

Context ctx = new Context();

ctx.setState(new Spring());

for(int month = 1; month <= 12; month++)

{

System.out.println("month : " + month);

ctx.process(month);

}

}

}

public class SeasonDefine

{

public static final int SPRING_BEGIN_MONTH = 1;

public static final int SUMMER_BEGIN_MONTH = 4;

public static final int AUTUMN_BEGIN_MONTH = 7;

public static final int WINNER_BEGIN_MONTH = 10;

public static final int WINNER_OVER_MONTH = 12;

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值