JAVA设计模式-State
来源:互联网 发布:西安交通大学网络学校 编辑:程序博客网 时间:2024/04/30 20:44
一个对像有不同的状态,不同的状态有不同的行为。也许你会说在方法里加上switch case语句就行了,这样的确能实现这样的方法,但是,就像前面一些设计模式的目的一样,这种方法不具可扩展性,因此我们需要一种设计模式来实现这个功能,并且需要提供可扩展性,因此,就有了状态模式。
来看一个例子:
- package state;
- interface State {
- public void fire();
- }
- class NormalState implements State {
- public void fire() {
- System.out.println("普通状态每秒开枪1次。");
- }
- }
- class ExcitedState implements State {
- public void fire() {
- System.out.println("兴奋状态每秒开枪2次。");
- }
- }
- class Marine {
- private State state;
- public Marine(State state){
- this.state = state;
- }
- public void setState(State state) {
- this.state = state;
- }
- // fire()方法,实际调用的是state变量的fire()方法:
- public void fire() {
- state.fire();
- }
- }
- public class Test{
- public static void main(String[] args) {
- Marine marine = new Marine(new NormalState()); // 创建一个机枪兵的实例:
- marine.fire(); // 调用fire()方法:
- marine.setState(new ExcitedState()); // 设置为兴奋状态:
- marine.fire(); // 再调用fire()方法:
- }
- }
在这个例子里面,士兵有两个状态。不同的状态,fire()方法是不同的,真正的fire()方法是定义在状态里的,因此,士兵类里的fire()方法只需要调用state.fire()就行了。这样设计的好处,就是让系统具有了可扩展性,当士兵有了新的状态的时候,只需要实现一个新的继承与State类的类就行了。那么士兵就自动具有了这个状态,不需要改动原有的代码。
运行结果为:
普通状态每秒开枪1次。
兴奋状态每秒开枪2次。
- JAVA设计模式-State
- JAVA设计模式-State
- Java设计模式-----State模式
- Java设计模式-----State模式
- Java设计模式 之 State
- Java设计模式之State(状态模式)
- java设计模式-状态模式(STATE)
- JAVA设计模式十二--State(状态模式)
- java设计模式之状态 模式State
- java设计模式-状态模式(State)
- JAVA设计模式—状态模式(State)
- Java设计模式九:状态模式(State)
- JAVA设计模式十二:--State(状态模式)
- Java设计模式----状态模式(State)
- Java设计模式 状态模式(State)
- java设计模式:状态模式 State
- java设计模式-状态模式State
- java设计模式--状态模式 State
- 新浪微博api调用android DEMO (完整版)
- 笔记本设置wifi热点
- 海边纪事
- hadoop 最小化运行
- 中国移动举行“移动生活卡”首发仪式
- JAVA设计模式-State
- flex组件生命周期对mxml和as的影响_悄悄俏俏
- 同方微电子3S理念护航金融IC卡
- USACO Section 1.4 Mother's Milk 搜索
- 29. A good conscience is a soft pillow. 不做亏心事,不怕鬼叫门
- 关于Windows程序的一些东西(断点、头文件)
- Cocoa Programming for Mac OS X 第四章(Memory Management)摘录
- 代码中标注的方法
- HtmlEditor (在线html编辑器)的使用