java设计模式实例-状态模式
状态模式(State Pattern)是设计模式的⼀种,属于⾏为模式。
  定义(源于Design Pattern):当⼀个对象的内在状态改变时允许改变其⾏为,这个对象看起来像是改变了其类。
  状态模式主要解决的是当控制⼀个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表⽰不同状态的⼀系列类中,可以把复杂的判断逻辑简化。
  意图:允许⼀个对象在其内部状态改变时改变它的⾏为
  适⽤场景:
  1.⼀个对象的⾏为取决于它的状态,并且它必须在运⾏时刻根据状态改变它的⾏为。
  2.⼀个操作中含有庞⼤的多分⽀结构,并且这些分⽀决定于对象的状态。
实例
1, 接⼝ State.java
View Code
de;
2
3public interface State {
4void handle(StateMachine machine);
5 }
2, 具体状态⼀开始, StartState.java
View Code
de;
2
3public class StartState implements State {
4
5public void handle(StateMachine machine) {
6        System.out.println("Start ");
7        machine.setCurrentSate(new DraftState());
8    }
9 }
3, 具体状态⼆草稿,DraftState.java
View Code
de;
2
3public class DraftState implements State {
4
5public void handle(StateMachine machine) {
6        System.out.println("");
7        machine.setCurrentSate(new PublishState());
8    }
9 }
4, 具体状态三发布,PublishState.java
View Code
de;
2
3public class PublishState implements State {
4java中常用的设计模式有哪些
5public void handle(StateMachine machine) {
6        System.out.println("");
7        machine.setCurrentSate(new CompletedState());
8
9    }
10
11 }
5, 具体状态四完成,CompletedState.java
View Code
de;
2
3public class CompletedState implements State {
4
5public void handle(StateMachine machine) {
6        System.out.println("Completed");
7        machine.setCurrentSate(null);
8    }
9 }
6, 状态容器及客户端调⽤, StateMachine.java View Code
de;
2
3import java.io.IOException;
4
5public class StateMachine {
6private State currentSate;
7
8public State getCurrentSate() {
9return currentSate;
10    }
11
12public void setCurrentSate(State currentSate) {
13this.currentSate = currentSate;
14    }
15
16public static void main(String[] args) throws IOException {
17        StateMachine machine = new StateMachine();
18        State start = new StartState();
19        machine.setCurrentSate(start);
CurrentSate() != null){
21            CurrentSate().handle(machine);
22        }
23
24        System.out.println("press any key to exit:");
25        ad();
26    }
27 }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。