public static void Main()
dog.Pathfinding.MakeFriendlySound();
public class Dog : Person {
public Dog() : base(new WorkerPathfinding())
public abstract class Person
public IPathfinding Pathfinding { get; private set; }
public Person(IPathfinding pathfinding)
this.Pathfinding = pathfinding;
public interface IPathfinding
void MakeFriendlySound();
public class WorkerPathfinding : IPathfinding
public void MakeFriendlySound()
Console.WriteLine("Woef");
public void MakeAngrySound()
Console.WriteLine("Grrrr");
public class GuestPathfinding : IPathfinding
public void MakeFriendlySound()
public void MakeAngrySound()
public int MaxCells {get; set;}
public int CellSize {get; set;}
for (int x = 0; x < MaxCells; x++)
for (int y = 0; y < MaxCells; y++)