using System;
namespace MyApp
{
class Program
{
static void Main()
{
Account myAccount = new Account();
myAccount.Level = 10;
myAccount.ShowCurrentState();
Console.WriteLine();
myAccount.Level = 30;
myAccount.ShowCurrentState();
Console.WriteLine();
myAccount.Level = 45;
myAccount.ShowCurrentState();
Console.WriteLine();
myAccount.Level = 67;
myAccount.ShowCurrentState();
Console.WriteLine();
myAccount.Level = 9;
myAccount.ShowCurrentState();
Console.ReadKey();
}
}
abstract class State
{
public abstract void ShowCurrentState(Account account);
public void ShowCurrentLevel(Account account)
{
Console.WriteLine("Level:{0}", account.Level);
}
}
class FirstState:State
{
public override void ShowCurrentState(Account account)
{
if (account.Level >= 30)
{
account.CurrentState = new SecondState();
account.ShowCurrentState();
}
else
{
Console.WriteLine("Newbie Account...");
ShowCurrentLevel(account);
}
}
}
class SecondState : State
{
public override void ShowCurrentState(Account account)
{
if (account.Level < 30)
{
account.CurrentState = new FirstState();
account.ShowCurrentState();
}
else if (account.Level >= 60)
{
account.CurrentState = new ThirdState();
account.ShowCurrentState();
}
else
{
Console.WriteLine("Middle Account...");
ShowCurrentLevel(account);
}
}
}
class ThirdState : State
{
public override void ShowCurrentState(Account account)
{
if (account.Level < 60)
{
account.CurrentState = new SecondState();
account.ShowCurrentState();
}
else
{
Console.WriteLine("High Account...");
ShowCurrentLevel(account);
}
}
}
interface ISetState
{
void UpdateCurrentState(State currentState);
}
class Account:ISetState
{
public State CurrentState { get; set; }
public int Level { get; set; }
public Account()
{
CurrentState = new FirstState();
Level = 0;
}
public void UpdateCurrentState(State currentState)
{
CurrentState = currentState;
}
public void ShowCurrentState()
{
CurrentState.ShowCurrentState(this);
}
}
}
2124

被折叠的 条评论
为什么被折叠?



