using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern21
{
//抽象状态
public
abstract
class
State
{
public
abstract
void
Eat();
public
abstract
void
Walk();
}
// 高兴时的状态
public
class
Happy : State
{
public
override
void
Eat()
{
human.Eat();
Console.WriteLine(
"很多!"
);
}
public
override
void
Walk()
{
human.Walk();
Console.WriteLine(
"手舞足蹈的!"
);
}
public
void
Attach(Human _human)
{
human = _human;
}
private
Human human;
}
// 伤心时的状态
public
class
Sad : State
{
public
override
void
Eat()
{
human.Eat();
Console.WriteLine(
"很少!"
);
}
public
override
void
Walk()
{
human.Walk();
Console.WriteLine(
"无精打采的!"
);
}
public
void
Attach(Human _human)
{
human = _human;
}
private
Human human;
}
// 一个人
public
class
Human
{
private
State current;
public
void
SetState(State s)
{
current = s;
}
public
void
Eat()
{
Console.Write(
"吃了"
);
}
public
void
Walk()
{
Console.Write(
"走起路来"
);
}
public
void
Show()
{
current.Eat();
current.Walk();
}
}
class
Program
{
static
void
Main(string[] args)
{
// 定义一个有很多状态的对象
Human human =
new
Human();
// 定义一个高兴的状态
Happy hState =
new
Happy();
hState.Attach(human);
human.SetState(hState);
human.Show();
// 定义一个伤心的状态
Sad sad =
new
Sad();
sad.Attach(human);
human.SetState(sad);
human.Show();
// 还可以添加生病的状态,只需要添加新的类而不需要修改Human类
// ......
Console.Read();
}
}
}