Created
October 17, 2018 17:53
-
-
Save sevperez/9777e5ae382489283d08e957d450d87e to your computer and use it in GitHub Desktop.
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
using System; | |
namespace abs_fac_1 | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
MonumentHandler greekMonumentHandler = | |
new MonumentHandler(new GreekMonumentFactory(), "Athena", "Pericles"); | |
greekMonumentHandler.IssueMessages(); | |
// The Olympian deity Athena demands tribute! | |
// The noble Greek leader Pericles requests submission of taxes! | |
MonumentHandler egyptianMonumentHandler = | |
new MonumentHandler(new EgyptianMonumentFactory(), "Sekhmet", "Hatchepsut"); | |
egyptianMonumentHandler.IssueMessages(); | |
// Now accepting offerings to the Egyptian deity Sekhmet! | |
// The mighty Egyptian pharaoh Hatchepsut demands payment of taxes! | |
} | |
} | |
class MonumentHandler | |
{ | |
private IAbstractMonumentFactory Factory; | |
private ITemple Temple; | |
private IPalace Palace; | |
public MonumentHandler(IAbstractMonumentFactory factory, string deityName, string leaderName) | |
{ | |
this.Factory = factory; | |
this.Temple = factory.BuildTemple(deityName); | |
this.Palace = factory.BuildPalace(leaderName); | |
} | |
public void IssueMessages() | |
{ | |
this.Temple.CollectOfferings(); | |
this.Palace.CollectTaxes(); | |
} | |
} | |
interface IAbstractMonumentFactory | |
{ | |
ITemple BuildTemple(string deityName); | |
IPalace BuildPalace(string leaderName); | |
} | |
class GreekMonumentFactory : IAbstractMonumentFactory | |
{ | |
public ITemple BuildTemple(string deityName) => new GreekTemple(deityName); | |
public IPalace BuildPalace(string leaderName) => new GreekPalace(leaderName); | |
} | |
class EgyptianMonumentFactory : IAbstractMonumentFactory | |
{ | |
public ITemple BuildTemple(string deityName) => new EgyptianTemple(deityName); | |
public IPalace BuildPalace(string leaderName) => new EgyptianPalace(leaderName); | |
} | |
interface ITemple | |
{ | |
void CollectOfferings(); | |
} | |
class GreekTemple : ITemple | |
{ | |
private string Deity; | |
public GreekTemple(string deityName) => this.Deity = deityName; | |
public void CollectOfferings() => | |
Console.WriteLine($"The Olympian deity {this.Deity} demands tribute!"); | |
} | |
class EgyptianTemple : ITemple | |
{ | |
private string Deity; | |
public EgyptianTemple(string deityName) => this.Deity = deityName; | |
public void CollectOfferings() => | |
Console.WriteLine($"Now accepting offerings to the Egyptian deity {this.Deity}!"); | |
} | |
interface IPalace | |
{ | |
void CollectTaxes(); | |
} | |
class GreekPalace : IPalace | |
{ | |
private string Leader; | |
public GreekPalace(string leaderName) => this.Leader = leaderName; | |
public void CollectTaxes() => | |
Console.WriteLine($"The noble Greek leader {this.Leader} requests submission of taxes!"); | |
} | |
class EgyptianPalace : IPalace | |
{ | |
private string Leader; | |
public EgyptianPalace(string leaderName) => this.Leader = leaderName; | |
public void CollectTaxes() => | |
Console.WriteLine($"The mighty Egyptian pharaoh {this.Leader} demands payment of taxes!"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment