Java设计模式之状态模式,Java设计模式之State(状态模式)

定义:

GOF《设计模式》中给状态模式下的定义为:允许一个对象在其内部状态改变时改变它的行为。

先看一个例子:

package com.state;

public class KissingPrincess {

// 标志位,标志是青蛙还是王子。

private boolean isFrog = true;

// 根据isFrog进行不同的操作。

public void greet() {

if (isFrog)

System.out.println("frog!");

else

System.out.println("prince!");

}

// 将isFrog设置成false。

public void kiss() {

isFrog = false;

}

// 主函数。

public static void main(String[] args) {

KissingPrincess prince = new KissingPrincess();

prince.greet();

prince.kiss();

prince.greet();

}

}

输出结果:

frog!

prince!

这个例子中,用了一个变量isFrog来标识是青蛙还是王子,如果是王子的话,输出"prince!",是青蛙的话,输出:“frog!”。

本例中的写法,用个朋友的话来说,只是“入门级程序员的写法”。在java中,要时时注意OOP(Object Oriented Programming)的概念。

如果状态很多的话,就会使用很多if else 语句,不仅繁琐难于维护,而且没有体现出面向对象编程的思想。

对上例应用状态模式后,可以变成如下的代码:

package com.state;

public class KissingPrincess2 {

private State state = new Frog();

private interface State {

void response();

}

private class Frog implements State {

@Override

public void response() {

System.out.println("frog!");

}

}

private class Prince implements State {

@Override

public void response() {

System.out.println("prince!");

}

}

public void greet() {

state.response();

}

public void change(State state) {

this.state = state;

}

public static void main(String[] args) {

KissingPrincess2 prince2 = new KissingPrincess2();

prince2.greet();

prince2.change(prince2.new Prince());

prince2.greet();

}

}

输出结果:

frog!

prince!

上述例子就是state模式的基本思想,希望读者朋友们认真体会。

这里再举个state模式的例子:

玩过cs的人都知道,cs里面有很多枪,ak47啊,m16啊,但是不管什么枪

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值