📄 client.java
字号:
/*
* Created on 2005-5-11
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.test.pattern.behavir.state;
/**
* @author Administrator
*
* 意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 适用性 一个对象的行为取决于它的状态,
* 并且它必须在运行时刻根据状态改变它的行为。
* 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常, 有多个操作包含这一相同的条件结构。S t
* a t e模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。
*
*/
abstract class State {
protected String strStatename;
abstract public void Pour();
// do something state-specific here
}
class OpenedState extends State {
public OpenedState() {
strStatename = "Opened";
}
public void Pour() {
System.out.println("...pouring...");
System.out.println("...pouring...");
System.out.println("...pouring...");
}
}
class ClosedState extends State {
public ClosedState() {
strStatename = "Closed";
}
public void Pour() {
System.out.println("ERROR - bottle is closed - cannot pour");
}
}
class ContextColaBottle {
// If teh state classes had large amounts of instance data,
// we could dynamically create them as needed - if this demo
// they are tiny, so we just create them as data members
OpenedState openedState = new OpenedState();
ClosedState closedState = new ClosedState();
public ContextColaBottle() {
// Initialize to closed
CurrentState = closedState;
}
private State CurrentState;
public void SetState(String newState) {
if (newState == "Closed") {
CurrentState = closedState;
} else {
CurrentState = openedState;
}
}
public void Pour() {
CurrentState.Pour();
}
}
/// <summary>
/// Summary description for Client.
/// </summary>
public class Client {
public static void main(String[] args) {
ContextColaBottle contextColaBottle = new ContextColaBottle();
System.out.println("initial state is closed");
System.out.println("Now trying to pour");
contextColaBottle.Pour();
System.out.println("Open bottle");
contextColaBottle.SetState("Opened");
System.out.println("Try to pour again");
contextColaBottle.Pour();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -