-
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
9 changed files
with
224 additions
and
1 deletion.
There are no files selected for viewing
28 changes: 28 additions & 0 deletions
28
MadWorld/MadWorld.Frontend.Application/DesignPatterns/DecoratorPattern/Character.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,28 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.DecoratorPattern; | ||
|
||
public class Character : ICharacter | ||
{ | ||
private readonly string _name; | ||
private readonly IReadOnlyList<string> _magicSpells; | ||
|
||
public Character(string name) | ||
{ | ||
_name = name; | ||
_magicSpells = new[] { "Light" }; | ||
} | ||
|
||
public string GetName() | ||
{ | ||
return _name; | ||
} | ||
|
||
public string GetClass() | ||
{ | ||
return string.Empty; | ||
} | ||
|
||
public IReadOnlyList<string> GetMagicSpells() | ||
{ | ||
return _magicSpells; | ||
} | ||
} |
31 changes: 31 additions & 0 deletions
31
MadWorld/MadWorld.Frontend.Application/DesignPatterns/DecoratorPattern/Cleric.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,31 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.DecoratorPattern; | ||
|
||
public class Cleric : IClassDecorator | ||
{ | ||
private readonly ICharacter _character; | ||
|
||
private readonly IReadOnlyList<string> _magicSpells; | ||
|
||
public Cleric(ICharacter character) | ||
{ | ||
_character = character; | ||
_magicSpells = new[] { "Bless", "Guiding Bolt" }; | ||
} | ||
|
||
public string GetName() | ||
{ | ||
return _character.GetName(); | ||
} | ||
|
||
public string GetClass() | ||
{ | ||
return $"Cleric, {_character.GetClass()}"; | ||
} | ||
|
||
public IReadOnlyList<string> GetMagicSpells() | ||
{ | ||
return _character.GetMagicSpells() | ||
.Concat(_magicSpells) | ||
.ToList(); | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
MadWorld/MadWorld.Frontend.Application/DesignPatterns/DecoratorPattern/ICharacter.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.DecoratorPattern; | ||
|
||
public interface ICharacter | ||
{ | ||
string GetName(); | ||
string GetClass(); | ||
IReadOnlyList<string> GetMagicSpells(); | ||
} |
6 changes: 6 additions & 0 deletions
6
MadWorld/MadWorld.Frontend.Application/DesignPatterns/DecoratorPattern/IClassDecorator.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.DecoratorPattern; | ||
|
||
public interface IClassDecorator : ICharacter | ||
{ | ||
|
||
} |
31 changes: 31 additions & 0 deletions
31
MadWorld/MadWorld.Frontend.Application/DesignPatterns/DecoratorPattern/Paladin.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,31 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.DecoratorPattern; | ||
|
||
public class Paladin : IClassDecorator | ||
{ | ||
private readonly ICharacter _character; | ||
|
||
private readonly IReadOnlyList<string> _magicSpells; | ||
|
||
public Paladin(ICharacter character) | ||
{ | ||
_character = character; | ||
_magicSpells = new[] { "Command", "CloudKill" }; | ||
} | ||
|
||
public string GetName() | ||
{ | ||
return _character.GetName(); | ||
} | ||
|
||
public string GetClass() | ||
{ | ||
return $"Paladin, {_character.GetClass()}"; | ||
} | ||
|
||
public IReadOnlyList<string> GetMagicSpells() | ||
{ | ||
return _character.GetMagicSpells() | ||
.Concat(_magicSpells) | ||
.ToList(); | ||
} | ||
} |
31 changes: 31 additions & 0 deletions
31
MadWorld/MadWorld.Frontend.Application/DesignPatterns/DecoratorPattern/Wizard.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,31 @@ | ||
namespace MadWorld.Frontend.Application.DesignPatterns.DecoratorPattern; | ||
|
||
public class Wizard : IClassDecorator | ||
{ | ||
private readonly ICharacter _character; | ||
|
||
private readonly IReadOnlyList<string> _magicSpells; | ||
|
||
public Wizard(ICharacter character) | ||
{ | ||
_character = character; | ||
_magicSpells = new[] { "CounterSpell", "Fireball" }; | ||
} | ||
|
||
public string GetName() | ||
{ | ||
return _character.GetName(); | ||
} | ||
|
||
public string GetClass() | ||
{ | ||
return $"Wizard, {_character.GetClass()}"; | ||
} | ||
|
||
public IReadOnlyList<string> GetMagicSpells() | ||
{ | ||
return _character.GetMagicSpells() | ||
.Concat(_magicSpells) | ||
.ToList(); | ||
} | ||
} |
42 changes: 42 additions & 0 deletions
42
...orld.Frontend.UI.Suite/Pages/Learn/DesignPatterns/DecoratorPattern/DecoratorPattern.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,42 @@ | ||
@page "/Learn/DesignPatterns/DecoratorPattern" | ||
|
||
@if (_character.IsSome) | ||
{ | ||
<div class="row"> | ||
<div class="col-4"> | ||
<div class="card" style="width: 30rem;"> | ||
<div class="card-body"> | ||
<h5 class="card-title">@Character.GetName()</h5> | ||
<p class="card-text">Class: @Character.GetClass()</p> | ||
<p class="card-text">Magic Spells: @string.Join(",", Character.GetMagicSpells())</p> | ||
<button class="btn btn-danger" @onclick="() => Reset()">Reset @Character.GetName()</button> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
<div class="row"> | ||
<div class="col-2"> | ||
<button class="btn btn-success" @onclick="AddCleric">Add Cleric</button> | ||
</div> | ||
<div class="col-2"> | ||
<button class="btn btn-warning" @onclick="AddPaladin">Add Paladin</button> | ||
</div> | ||
<div class="col-2"> | ||
<button class="btn btn-danger" @onclick="AddWizard">Add Wizard</button> | ||
</div> | ||
</div> | ||
} | ||
else | ||
{ | ||
<RadzenTemplateForm Data="@_name" Submit="(string name) => CreateCharacter(name)"> | ||
<RadzenColumn Size="12" SizeMD="4"> | ||
<RadzenLabel Text="Character name" /> | ||
</RadzenColumn> | ||
<RadzenColumn Size="12" SizeMD="8"> | ||
<RadzenTextBox @bind-Value="_name" class="col-width-100"></RadzenTextBox> | ||
</RadzenColumn> | ||
<RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="1rem" Class="rz-mt-8 rz-mb-4"> | ||
<RadzenButton ButtonType="ButtonType.Submit" Size="ButtonSize.Large" Icon="save" Text="Save" /> | ||
</RadzenStack> | ||
</RadzenTemplateForm> | ||
} |
37 changes: 37 additions & 0 deletions
37
...d.Frontend.UI.Suite/Pages/Learn/DesignPatterns/DecoratorPattern/DecoratorPattern.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,37 @@ | ||
using LanguageExt; | ||
using MadWorld.Frontend.Application.DesignPatterns.DecoratorPattern; | ||
|
||
namespace MadWorld.Frontend.UI.Suite.Pages.Learn.DesignPatterns.DecoratorPattern; | ||
|
||
public partial class DecoratorPattern | ||
{ | ||
private Option<ICharacter> _character = Option<ICharacter>.None; | ||
private ICharacter Character => _character.FirstOrDefault()!; | ||
|
||
private string _name = string.Empty; | ||
|
||
private void CreateCharacter(string name) | ||
{ | ||
_character = new Character(name); | ||
} | ||
|
||
private void AddCleric() | ||
{ | ||
_character = new Cleric(Character); | ||
} | ||
|
||
private void AddPaladin() | ||
{ | ||
_character = new Paladin(Character); | ||
} | ||
|
||
private void AddWizard() | ||
{ | ||
_character = new Wizard(Character); | ||
} | ||
|
||
private void Reset() | ||
{ | ||
_character = Option<ICharacter>.None; | ||
} | ||
} |
11 changes: 10 additions & 1 deletion
11
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 |
---|---|---|
@@ -1,3 +1,12 @@ | ||
@page "/Learn/DesignPatterns" | ||
|
||
<a href="/Learn/DesignPatterns/ObserverPattern" class="btn btn-primary">Observer Patterns</a> | ||
<div class="container"> | ||
<div class="row"> | ||
<div class="col"> | ||
<a href="/Learn/DesignPatterns/ObserverPattern" class="btn btn-primary">Observer Pattern</a> | ||
</div> | ||
<div class="col"> | ||
<a href="/Learn/DesignPatterns/DecoratorPattern" class="btn btn-primary">Decorator Pattern</a> | ||
</div> | ||
</div> | ||
</div> |