⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.java

📁 设计模式描述设计模式描述设计模式描述设计模式描述
💻 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 + -