Add code examples, and documentation

This commit is contained in:
Aaron Po
2026-08-12 00:03:32 -04:00
commit 77c16e69f6
79 changed files with 4458 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
#region
using WithStatePattern.States;
#endregion
namespace WithStatePattern;
public class Car
{
private State _state;
public Car()
{
ChangeState(new Off(this));
}
public bool HandleInput(string input)
{
switch (input)
{
case "turn-clockwise":
_state.TurnKeyClockwise();
break;
case "turn-counter":
_state.TurnKeyCounterClockwise();
break;
case "gas":
_state.PressGas();
break;
case "brake":
_state.PressBrake();
break;
case "exit":
return false;
}
return true;
}
public void ChangeState(State state)
{
_state = state;
}
}

View File

@@ -0,0 +1,35 @@
namespace WithStatePattern;
public class Program
{
private static void Main(string[] args)
{
var car = new Car();
string input;
bool keepRunning = true;
Console.WriteLine("Welcome to the Driving Simulater");
Console.WriteLine();
Console.WriteLine("Usage:");
Console.WriteLine(" turn-clockwise -Turns the car's key clockwise");
Console.WriteLine(
" turn-counter -Turns the car's key counter clockwise"
);
Console.WriteLine(" gas -Presses the gas pedal");
Console.WriteLine(" brake -Presses the brake pedal");
Console.WriteLine(" exit -Exits the simulator");
Console.WriteLine();
do
{
Console.Write("> ");
input = Console.ReadLine();
Console.WriteLine();
keepRunning = car.HandleInput(input);
} while (keepRunning);
Console.WriteLine();
Console.WriteLine("goodbye");
Console.WriteLine();
}
}

View File

@@ -0,0 +1,27 @@
namespace WithStatePattern.States;
public class Driving : State
{
public Driving(Car car)
: base(car) { }
public override void TurnKeyClockwise()
{
Console.WriteLine("You hear a grinding noise...");
Console.WriteLine();
}
public override void TurnKeyCounterClockwise()
{
Console.WriteLine("The engine turns off, and the car stops suddenly");
Console.WriteLine();
_car.ChangeState(new Off(_car));
}
public override void PressBrake()
{
Console.WriteLine("The car slows to a stop");
Console.WriteLine();
_car.ChangeState(new Stopped(_car));
}
}

View File

@@ -0,0 +1,14 @@
namespace WithStatePattern.States;
public class Off : State
{
public Off(Car car)
: base(car) { }
public override void TurnKeyClockwise()
{
Console.WriteLine("The engine has started");
Console.WriteLine();
_car.ChangeState(new Stopped(_car));
}
}

View File

@@ -0,0 +1,19 @@
namespace WithStatePattern.States;
public class State
{
protected Car _car;
public State(Car car)
{
_car = car;
}
public virtual void TurnKeyClockwise() { }
public virtual void TurnKeyCounterClockwise() { }
public virtual void PressGas() { }
public virtual void PressBrake() { }
}

View File

@@ -0,0 +1,27 @@
namespace WithStatePattern.States;
public class Stopped : State
{
public Stopped(Car car)
: base(car) { }
public override void PressGas()
{
Console.WriteLine("The car begins to drive");
Console.WriteLine();
_car.ChangeState(new Driving(_car));
}
public override void TurnKeyClockwise()
{
Console.WriteLine("You hear a grinding noise...");
Console.WriteLine();
}
public override void TurnKeyCounterClockwise()
{
Console.WriteLine("The engine has stopped");
Console.WriteLine();
_car.ChangeState(new Off(_car));
}
}

View File

@@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>