-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
219 additions
and
0 deletions.
There are no files selected for viewing
33 changes: 33 additions & 0 deletions
33
MadWorld/MadWorld.Frontend.Application/DesignPatterns/ObserverPattern/FormulaOne.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.ObserverPattern; | ||
|
||
public class FormulaOne : ISubject | ||
{ | ||
private readonly List<IObserver> _observers = new(); | ||
private RacingFlag _racingFlag = RacingFlag.Green; | ||
|
||
public void RegisterObserver(IObserver observer) | ||
{ | ||
_observers.Add(observer); | ||
} | ||
|
||
public void UnregisterObserver(IObserver observer) | ||
{ | ||
_observers.Remove(observer); | ||
} | ||
|
||
public void NotifyObservers() | ||
{ | ||
_observers.ForEach(o => o.Update()); | ||
} | ||
|
||
public RacingFlag GetRacingFlag() | ||
{ | ||
return _racingFlag; | ||
} | ||
|
||
public void SetRacingFlag(RacingFlag racingFlag) | ||
{ | ||
_racingFlag = racingFlag; | ||
NotifyObservers(); | ||
} | ||
} |
7 changes: 7 additions & 0 deletions
7
MadWorld/MadWorld.Frontend.Application/DesignPatterns/ObserverPattern/ICar.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.ObserverPattern; | ||
|
||
public interface ICar : IDisposable | ||
{ | ||
public string Name { get; } | ||
string GetRacingPace(); | ||
} |
6 changes: 6 additions & 0 deletions
6
MadWorld/MadWorld.Frontend.Application/DesignPatterns/ObserverPattern/IObserver.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.ObserverPattern; | ||
|
||
public interface IObserver : IDisposable | ||
{ | ||
void Update(); | ||
} |
8 changes: 8 additions & 0 deletions
8
MadWorld/MadWorld.Frontend.Application/DesignPatterns/ObserverPattern/ISubject.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.ObserverPattern; | ||
|
||
public interface ISubject | ||
{ | ||
void RegisterObserver(IObserver observer); | ||
void UnregisterObserver(IObserver observer); | ||
void NotifyObservers(); | ||
} |
37 changes: 37 additions & 0 deletions
37
MadWorld/MadWorld.Frontend.Application/DesignPatterns/ObserverPattern/Mercedes.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.ObserverPattern; | ||
|
||
public class Mercedes : ICar, IObserver | ||
{ | ||
public string Name { get; } = "Mercedes"; | ||
|
||
private RacingFlag _flag; | ||
private readonly FormulaOne _formulaOne; | ||
|
||
public Mercedes(FormulaOne formulaOne) | ||
{ | ||
_formulaOne = formulaOne; | ||
_formulaOne.RegisterObserver(this); | ||
} | ||
|
||
public void Update() | ||
{ | ||
_flag = _formulaOne.GetRacingFlag(); | ||
} | ||
|
||
public string GetRacingPace() | ||
{ | ||
return _flag switch | ||
{ | ||
RacingFlag.Green => "Full speed ahead!", | ||
RacingFlag.Yellow => "Slow down!", | ||
RacingFlag.Red => "Stop!", | ||
_ => throw new ArgumentOutOfRangeException() | ||
}; | ||
} | ||
|
||
public void Dispose() | ||
{ | ||
_formulaOne.UnregisterObserver(this); | ||
GC.SuppressFinalize(this); | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
MadWorld/MadWorld.Frontend.Application/DesignPatterns/ObserverPattern/RacingFlag.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.ObserverPattern; | ||
|
||
public enum RacingFlag | ||
{ | ||
Green, | ||
Yellow, | ||
Red | ||
} |
37 changes: 37 additions & 0 deletions
37
MadWorld/MadWorld.Frontend.Application/DesignPatterns/ObserverPattern/RedBull.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.ObserverPattern; | ||
|
||
public class RedBull : ICar, IObserver | ||
{ | ||
public string Name { get; } = "Red Bull"; | ||
|
||
private RacingFlag _flag; | ||
private readonly FormulaOne _formulaOne; | ||
|
||
public RedBull(FormulaOne formulaOne) | ||
{ | ||
_formulaOne = formulaOne; | ||
_formulaOne.RegisterObserver(this); | ||
} | ||
|
||
public void Update() | ||
{ | ||
_flag = _formulaOne.GetRacingFlag(); | ||
} | ||
|
||
public string GetRacingPace() | ||
{ | ||
return _flag switch | ||
{ | ||
RacingFlag.Green => "Fly away!", | ||
RacingFlag.Yellow => "Go half speed!", | ||
RacingFlag.Red => "Stop!", | ||
_ => throw new ArgumentOutOfRangeException() | ||
}; | ||
} | ||
|
||
public void Dispose() | ||
{ | ||
_formulaOne.UnregisterObserver(this); | ||
GC.SuppressFinalize(this); | ||
} | ||
} |
3 changes: 3 additions & 0 deletions
3
MadWorld/MadWorld.Frontend.UI.Suite/Pages/Learn/DesignPatterns/DesignPatterns.razor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
@page "/Learn/DesignPatterns" | ||
|
||
<a href="/Learn/DesignPatterns/ObserverPattern" class="btn btn-primary">Observer Patterns</a> |
40 changes: 40 additions & 0 deletions
40
...dWorld.Frontend.UI.Suite/Pages/Learn/DesignPatterns/ObserverPattern/ObserverPattern.razor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
@page "/Learn/DesignPatterns/ObserverPattern" | ||
|
||
@using MadWorld.Frontend.Application.DesignPatterns.ObserverPattern | ||
|
||
<div class="container"> | ||
<div class="row"> | ||
<div class="col-2"> | ||
<button class="btn btn-success" @onclick="() => ChangeFlag(RacingFlag.Green)">Show green flag</button> | ||
</div> | ||
<div class="col-2"> | ||
<button class="btn btn-warning" @onclick="() => ChangeFlag(RacingFlag.Yellow)">Show yellow flag</button> | ||
</div> | ||
<div class="col-2"> | ||
<button class="btn btn-danger" @onclick="() => ChangeFlag(RacingFlag.Red)">Show red flag</button> | ||
</div> | ||
</div> | ||
<div class="row"> | ||
<div class="col-2"> | ||
<button class="btn btn-primary" @onclick="AddRedBull">Add Red Bull</button> | ||
</div> | ||
<div class="col-2"> | ||
<button class="btn btn-primary" @onclick="AddMercedes">Add Mercedes</button> | ||
</div> | ||
</div> | ||
<div class="row"> | ||
@foreach (var car in _formulaOneCars) | ||
{ | ||
<div class="col-4"> | ||
<div class="card" style="width: 18rem;"> | ||
<div class="card-body"> | ||
<h5 class="card-title">@car.Name</h5> | ||
<p class="card-text">Speed: @car.GetRacingPace()</p> | ||
<button class="btn btn-danger" @onclick="() => RemoveCar(car)">Remove @car.Name</button> | ||
</div> | ||
</div> | ||
</div> | ||
} | ||
</div> | ||
</div> | ||
|
32 changes: 32 additions & 0 deletions
32
...rld.Frontend.UI.Suite/Pages/Learn/DesignPatterns/ObserverPattern/ObserverPattern.razor.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
using JetBrains.Annotations; | ||
using MadWorld.Frontend.Application.DesignPatterns.ObserverPattern; | ||
|
||
namespace MadWorld.Frontend.UI.Suite.Pages.Learn.DesignPatterns.ObserverPattern; | ||
|
||
[UsedImplicitly] | ||
public partial class ObserverPattern | ||
{ | ||
private readonly FormulaOne _formulaOne = new(); | ||
private readonly List<ICar> _formulaOneCars = new(); | ||
|
||
private void ChangeFlag(RacingFlag flag) | ||
{ | ||
_formulaOne.SetRacingFlag(flag); | ||
} | ||
|
||
private void AddRedBull() | ||
{ | ||
_formulaOneCars.Add(new RedBull(_formulaOne)); | ||
} | ||
|
||
private void AddMercedes() | ||
{ | ||
_formulaOneCars.Add(new Mercedes(_formulaOne)); | ||
} | ||
|
||
private void RemoveCar(ICar car) | ||
{ | ||
_formulaOneCars.Remove(car); | ||
car.Dispose(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
@page "/Learn" | ||
|
||
<a href="/Learn/DesignPatterns" class="btn btn-primary">Design Patterns</a> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters