首页 > 数据库 > 数据库开发技术 > 状态模式--黑崎一护的嗑药历程






public enum State {
/**
* 正常状态
*/
NORMAL(0),
/**
* 始解状态
*/
INITIAL(1),
/**
* 卍解状态
*/
SWASTIKA(2),
/**
* 虚化状态
*/
BLUR(3);
private int value;
private State(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
}
public class TransformStateMachine {
/**
* 战斗力
*/
private int fightingPower;
/**
* 当前状态
*/
private State currentState;
public int getFightingPower() {
return this.fightingPower;
}
public State getCurrentState() {
return this.currentState;
}
/**
* 初始化
*/
public TransformStateMachine() {
this.fightingPower = 100;
this.currentState = State.NORMAL;
}
/**
* 吃下始解药丸
*/
public void eateInitialPill() {
System.out.println("吃下始解药丸");
if(currentState.equals(State.NORMAL)) {
this.currentState = State.INITIAL;
this.fightingPower += 200;
System.out.println("**变身始解状态**战斗力加200");
} else {
System.out.println("木有任何变化。。。");
}
}
/**
* 吃下卍解药丸
*/
public void eateSwastikaPill() {
System.out.println("吃下卍解药丸");
if(currentState.equals(State.NORMAL) || currentState.equals(State.INITIAL)) {
this.currentState = State.SWASTIKA;
this.fightingPower += 500;
System.out.println("**变身卍解状态**战斗力加500");
} else {
System.out.println("木有任何变化。。。");
}
}
/**
* 吃下虚化药丸
*/
public void eateBlurPill() {
System.out.println("吃下虚化药丸");
if(currentState.equals(State.SWASTIKA)) {
this.currentState = State.BLUR;
this.fightingPower += 1000;
System.out.println("**变身虚化状态**战斗力加1000");
} else {
System.out.println("木有任何变化。。。");
}
}
/**
* 使用必杀技
*/
public void useUniqueSkill() {
System.out.println("使用必杀技");
if(currentState.equals(State.INITIAL) || currentState.equals(State.SWASTIKA) || currentState.equals(State.BLUR)) {
System.out.println("月牙天冲--->");
this.currentState = State.NORMAL;
this.fightingPower = 100;
System.out.println("**变回初始状态**战斗力变成100");
} else {
System.out.println("木有任何变化。。。");
}
}
}
public class Test {
public static void main(String[] args) {
TransformStateMachine transformStateMachine = new TransformStateMachine();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.eateInitialPill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.eateSwastikaPill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.eateBlurPill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.useUniqueSkill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.useUniqueSkill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
}
}
当前状态: NORMAL; 战斗力指数: 100
吃下始解药丸
**变身始解状态**战斗力加200
当前状态: INITIAL; 战斗力指数: 300
吃下卍解药丸
**变身卍解状态**战斗力加500
当前状态: SWASTIKA; 战斗力指数: 800
吃下虚化药丸
**变身虚化状态**战斗力加1000
当前状态: BLUR; 战斗力指数: 1800
使用必杀技
月牙天冲--->
**变回初始状态**战斗力变成100
当前状态: NORMAL; 战斗力指数: 100
使用必杀技
木有任何变化。。。
当前状态: NORMAL; 战斗力指数: 100


public enum State {
/**
* 正常状态
*/
NORMAL(0),
/**
* 始解状态
*/
INITIAL(1),
/**
* 卍解状态
*/
SWASTIKA(2),
/**
* 虚化状态
*/
BLUR(3);
private int value;
private State(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
}
public interface ITransformState {
/**
* 获取当前状态
* @return
*/
State getState();
/**
* 吃下始解药丸
*/
void eateInitialPill();
/**
* 吃下卍解药丸
*/
void eateSwastikaPill();
/**
* 吃下虚化药丸
*/
void eateBlurPill();
/**
* 使用必杀技
*/
void useUniqueSkill();
}
public class NormalTransform implements ITransformState{
private TransformStateMachine transformStateMachine;
public NormalTransform(TransformStateMachine transformStateMachine) {
this.transformStateMachine = transformStateMachine;
}
/**
* 获取当前状态
* @return
*/
public State getState() {
return State.NORMAL;
}
/**
* 吃下始解药丸
*/
public void eateInitialPill() {
System.out.println("吃下始解药丸");
transformStateMachine.setCurrentState(new InitialTransform(transformStateMachine));
transformStateMachine.setFightingPower(transformStateMachine.getFightingPower() + 200);
System.out.println("**变身始解状态**战斗力加200");
}
/**
* 吃下卍解药丸
*/
public void eateSwastikaPill() {
System.out.println("吃下卍解药丸");
transformStateMachine.setCurrentState(new SwastikaTransform(transformStateMachine));
transformStateMachine.setFightingPower(transformStateMachine.getFightingPower() + 500);
System.out.println("**变身卍解状态**战斗力加500");
}
/**
* 吃下虚化药丸
*/
public void eateBlurPill() {
System.out.println("吃下虚化药丸");
System.out.println("木有任何变化。。。");
}
/**
* 使用必杀技
*/
public void useUniqueSkill() {
System.out.println("使用必杀技");
System.out.println("木有任何变化。。。");
}
}
public class InitialTransform implements ITransformState{
private TransformStateMachine transformStateMachine;
public InitialTransform(TransformStateMachine transformStateMachine) {
this.transformStateMachine = transformStateMachine;
}
/**
* 获取当前状态
* @return
*/
public State getState() {
return State.INITIAL;
}
/**
* 吃下始解药丸
*/
public void eateInitialPill() {
System.out.println("吃下始解药丸");
System.out.println("木有任何变化。。。");
}
/**
* 吃下卍解药丸
*/
public void eateSwastikaPill() {
System.out.println("吃下卍解药丸");
transformStateMachine.setCurrentState(new SwastikaTransform(transformStateMachine));
transformStateMachine.setFightingPower(transformStateMachine.getFightingPower() + 500);
System.out.println("**变身卍解状态**战斗力加500");
}
/**
* 吃下虚化药丸
*/
public void eateBlurPill() {
System.out.println("吃下虚化药丸");
System.out.println("木有任何变化。。。");
}
/**
* 使用必杀技
*/
public void useUniqueSkill() {
System.out.println("使用必杀技");
System.out.println("月牙天冲--->");
transformStateMachine.setCurrentState(new NormalTransform(transformStateMachine));
transformStateMachine.setFightingPower(100);
System.out.println("**变回初始状态**战斗力变成100");
}
}
public class SwastikaTransform implements ITransformState {
private TransformStateMachine transformStateMachine;
public SwastikaTransform(TransformStateMachine transformStateMachine) {
this.transformStateMachine = transformStateMachine;
}
/**
* 获取当前状态
* @return
*/
public State getState() {
return State.SWASTIKA;
}
/**
* 吃下始解药丸
*/
public void eateInitialPill() {
System.out.println("吃下始解药丸");
System.out.println("木有任何变化。。。");
}
/**
* 吃下卍解药丸
*/
public void eateSwastikaPill() {
System.out.println("吃下始解药丸");
System.out.println("木有任何变化。。。");
}
/**
* 吃下虚化药丸
*/
public void eateBlurPill() {
System.out.println("吃下虚化药丸");
transformStateMachine.setCurrentState(new BlurTransform(transformStateMachine));
transformStateMachine.setFightingPower(transformStateMachine.getFightingPower() + 1000);
System.out.println("**变身虚化状态**战斗力加1000");
}
/**
* 使用必杀技
*/
public void useUniqueSkill() {
System.out.println("使用必杀技");
System.out.println("黑流牙突--->");
transformStateMachine.setCurrentState(new NormalTransform(transformStateMachine));
transformStateMachine.setFightingPower(100);
System.out.println("**变回初始状态**战斗力变成100");
}
}
public class BlurTransform implements ITransformState {
private TransformStateMachine transformStateMachine;
public BlurTransform(TransformStateMachine transformStateMachine) {
this.transformStateMachine = transformStateMachine;
}
/**
* 获取当前状态
* @return
*/
public State getState() {
return State.BLUR;
}
/**
* 吃下始解药丸
*/
public void eateInitialPill() {
System.out.println("吃下始解药丸");
System.out.println("木有任何变化。。。");
}
/**
* 吃下卍解药丸
*/
public void eateSwastikaPill() {
System.out.println("吃下卍解药丸");
System.out.println("木有任何变化。。。");
}
/**
* 吃下虚化药丸
*/
public void eateBlurPill() {
System.out.println("吃下虚化药丸");
System.out.println("木有任何变化。。。");
}
/**
* 使用必杀技
*/
public void useUniqueSkill() {
System.out.println("使用必杀技");
System.out.println("王虚的闪光--->");
transformStateMachine.setCurrentState(new NormalTransform(transformStateMachine));
transformStateMachine.setFightingPower(100);
System.out.println("**变回初始状态**战斗力变成100");
}
}
public class TransformStateMachine {
/**
* 战斗力
*/
private int fightingPower;
/**
* 当前状态
*/
private ITransformState currentState;
/**
* 初始化
*/
public TransformStateMachine() {
this.fightingPower = 100;
this.currentState = new NormalTransform(this);
}
/**
* 吃下始解药丸
*/
public void eateInitialPill() {
this.currentState.eateInitialPill();
}
/**
* 吃下卍解药丸
*/
public void eateSwastikaPill() {
this.currentState.eateSwastikaPill();
}
/**
* 吃下虚化药丸
*/
public void eateBlurPill() {
this.currentState.eateBlurPill();
}
/**
* 使用必杀技
*/
public void useUniqueSkill() {
this.currentState.useUniqueSkill();
}
public int getFightingPower() {
return this.fightingPower;
}
public void setFightingPower(int fightingPower) {
this.fightingPower = fightingPower;
}
public State getCurrentState() {
return this.currentState.getState();
}
public void setCurrentState(ITransformState currentState) {
this.currentState = currentState;
}
}
public class Test {
public static void main(String[] args) {
TransformStateMachine transformStateMachine = new TransformStateMachine();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.eateInitialPill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.eateBlurPill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.eateSwastikaPill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.eateBlurPill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.useUniqueSkill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.eateSwastikaPill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
transformStateMachine.useUniqueSkill();
System.out.println("当前状态: " + transformStateMachine.getCurrentState() + "; 战斗力指数: " + transformStateMachine.getFightingPower() + '\n');
}
}
当前状态: NORMAL; 战斗力指数: 100
吃下始解药丸
**变身始解状态**战斗力加200
当前状态: INITIAL; 战斗力指数: 300
吃下虚化药丸
木有任何变化。。。
当前状态: INITIAL; 战斗力指数: 300
吃下卍解药丸
**变身卍解状态**战斗力加500
当前状态: SWASTIKA; 战斗力指数: 800
吃下虚化药丸
**变身虚化状态**战斗力加1000
当前状态: BLUR; 战斗力指数: 1800
使用必杀技
王虚的闪光--->
**变回初始状态**战斗力变成100
当前状态: NORMAL; 战斗力指数: 100
吃下卍解药丸
**变身卍解状态**战斗力加500
当前状态: SWASTIKA; 战斗力指数: 600
使用必杀技
黑流牙突--->
**变回初始状态**战斗力变成100
当前状态: NORMAL; 战斗力指数: 100

原文作者:编程我也会;如有侵权,请联系管理员删除。