CodeKicks.com
Focus on Microsoft Technologies - Tutorials, Articles, Code Samples.

Monday, September 26, 2011

State Design Pattern .NET Code Sample

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Program
{
static void Main(string[] args)
{
Person p1 = new Person("P1");
Person p2 = new Person("P2");
p1.EatFood();
p2.EatFood();
p1.Vomit();
p2.Vomit();
}
}



interface StomachState
{
void Eat(Person p);
void Vomit(Person p);
}

class StomachFull : StomachState
{
public void Eat(Person p)
{
Console.WriteLine("Can't eat more.");
}

public void Vomit(Person p)
{
Console.WriteLine("I've just Vomited.");
p.StomachState = new StomachEmpty();
}
}

class StomachEmpty : StomachState
{
public void Eat(Person p)
{
Console.WriteLine("I've just had food.");
p.StomachState = new StomachFull();
}

public void Vomit(Person p)
{
Console.WriteLine("Nothing to Vomit.");
}
}

class Person
{
private StomachState stomachState;
private String personName;
public Person(String personName)
{
this.personName = personName;
StomachState = new StomachEmpty();
}

public StomachState StomachState
{
get
{
return stomachState;
}
set
{
stomachState = value;
Console.WriteLine(personName + " Stomach State Changed to " + StomachState.GetType().Name);
Console.WriteLine("***********************************************\n");
}
}

public Person(StomachState StomachState)
{
this.StomachState = StomachState;
}

public void EatFood()
{
StomachState.Eat(this);
}

public void Vomit()
{
StomachState.Vomit(this);
}
}

Post a Comment