From 7cc61454452d7386b52d3dd75dfc03d36cf5c76b Mon Sep 17 00:00:00 2001 From: dim_ok00 Date: Sat, 4 May 2019 23:48:12 +0300 Subject: [PATCH 01/16] Add PrototypePattern --- DesignPatternsDotNetCore.sln | 16 +++++++++++++++- PrototypePattern/Circle.cs | 22 ++++++++++++++++++++++ PrototypePattern/IFigure.cs | 9 +++++++++ PrototypePattern/Program.cs | 22 ++++++++++++++++++++++ PrototypePattern/PrototypePattern.csproj | 8 ++++++++ PrototypePattern/Rectangle.cs | 24 ++++++++++++++++++++++++ 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 PrototypePattern/Circle.cs create mode 100644 PrototypePattern/IFigure.cs create mode 100644 PrototypePattern/Program.cs create mode 100644 PrototypePattern/PrototypePattern.csproj create mode 100644 PrototypePattern/Rectangle.cs diff --git a/DesignPatternsDotNetCore.sln b/DesignPatternsDotNetCore.sln index 299d95a..5fa0760 100644 --- a/DesignPatternsDotNetCore.sln +++ b/DesignPatternsDotNetCore.sln @@ -30,7 +30,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FlyweightPattern", "Flyweig EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisitorPattern", "VisitorPattern\VisitorPattern.csproj", "{871F7BE0-B75F-4F9E-9C4D-CE9C4ECE7A88}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FactoryPattern", "FactoryPattern\FactoryPattern.csproj", "{182B58DC-6787-4A09-8BCF-87A96737E5A6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FactoryPattern", "FactoryPattern\FactoryPattern.csproj", "{182B58DC-6787-4A09-8BCF-87A96737E5A6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrototypePattern", "PrototypePattern\PrototypePattern.csproj", "{2DC00E3D-2099-4C58-B98F-B6B3F285739F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -222,6 +224,18 @@ Global {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x64.Build.0 = Release|Any CPU {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.ActiveCfg = Release|Any CPU {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.Build.0 = Release|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|x64.ActiveCfg = Debug|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|x64.Build.0 = Debug|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|x86.ActiveCfg = Debug|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|x86.Build.0 = Debug|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Release|Any CPU.Build.0 = Release|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Release|x64.ActiveCfg = Release|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Release|x64.Build.0 = Release|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Release|x86.ActiveCfg = Release|Any CPU + {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PrototypePattern/Circle.cs b/PrototypePattern/Circle.cs new file mode 100644 index 0000000..6289f77 --- /dev/null +++ b/PrototypePattern/Circle.cs @@ -0,0 +1,22 @@ +using System; + +namespace PrototypePattern +{ + class Circle : IFigure + { + readonly int _radius; + public Circle(int r) + { + _radius = r; + } + + public object Clone() + { + return new Circle(_radius); + } + public void GetInfo() + { + Console.WriteLine($"Circle with radius {_radius}"); + } + } +} \ No newline at end of file diff --git a/PrototypePattern/IFigure.cs b/PrototypePattern/IFigure.cs new file mode 100644 index 0000000..85879a4 --- /dev/null +++ b/PrototypePattern/IFigure.cs @@ -0,0 +1,9 @@ +using System; + +namespace PrototypePattern +{ + interface IFigure : ICloneable + { + void GetInfo(); + } +} \ No newline at end of file diff --git a/PrototypePattern/Program.cs b/PrototypePattern/Program.cs new file mode 100644 index 0000000..ebdecdb --- /dev/null +++ b/PrototypePattern/Program.cs @@ -0,0 +1,22 @@ +using System; + +namespace PrototypePattern +{ + class Program + { + static void Main(string[] args) + { + IFigure figure = new Rectangle(30, 40); + IFigure clonedFigure = (IFigure)figure.Clone(); + figure.GetInfo(); + clonedFigure.GetInfo(); + + figure = new Circle(30); + clonedFigure = (IFigure)figure.Clone(); + figure.GetInfo(); + clonedFigure.GetInfo(); + + Console.Read(); + } + } +} diff --git a/PrototypePattern/PrototypePattern.csproj b/PrototypePattern/PrototypePattern.csproj new file mode 100644 index 0000000..23df604 --- /dev/null +++ b/PrototypePattern/PrototypePattern.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.1 + + + diff --git a/PrototypePattern/Rectangle.cs b/PrototypePattern/Rectangle.cs new file mode 100644 index 0000000..9856cf2 --- /dev/null +++ b/PrototypePattern/Rectangle.cs @@ -0,0 +1,24 @@ +using System; + +namespace PrototypePattern +{ + class Rectangle : IFigure + { + readonly int _width; + readonly int _height; + public Rectangle(int w, int h) + { + _width = w; + _height = h; + } + + public object Clone() + { + return new Rectangle(_width, _height); + } + public void GetInfo() + { + Console.WriteLine($"Rectangle height {_height} and width {_width}"); + } + } +} \ No newline at end of file From abd12be1387418660e1bda9e45bf7de446ba346b Mon Sep 17 00:00:00 2001 From: basbros Date: Mon, 20 May 2019 14:38:49 +0200 Subject: [PATCH 02/16] Add builder pattern (#14) * Add builder pattern * Revert VS2019 info from .sln file * Downgrade target framework to core 2.0 * Fix GUID of BuildPattern project type --- .../BuilderPattern/BuilderPattern.csproj | 8 +++ BuilderPattern/BuilderPattern/Hamburger.cs | 32 ++++++++++++ .../BuilderPattern/HamburgerBuilder.cs | 52 +++++++++++++++++++ BuilderPattern/BuilderPattern/Program.cs | 26 ++++++++++ DesignPatternsDotNetCore.sln | 16 +++++- 5 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 BuilderPattern/BuilderPattern/BuilderPattern.csproj create mode 100644 BuilderPattern/BuilderPattern/Hamburger.cs create mode 100644 BuilderPattern/BuilderPattern/HamburgerBuilder.cs create mode 100644 BuilderPattern/BuilderPattern/Program.cs diff --git a/BuilderPattern/BuilderPattern/BuilderPattern.csproj b/BuilderPattern/BuilderPattern/BuilderPattern.csproj new file mode 100644 index 0000000..ce1697a --- /dev/null +++ b/BuilderPattern/BuilderPattern/BuilderPattern.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.0 + + + diff --git a/BuilderPattern/BuilderPattern/Hamburger.cs b/BuilderPattern/BuilderPattern/Hamburger.cs new file mode 100644 index 0000000..7d3bcc1 --- /dev/null +++ b/BuilderPattern/BuilderPattern/Hamburger.cs @@ -0,0 +1,32 @@ +namespace BuilderPattern +{ + public class Hamburger + { + public bool HasBread { get; } + public bool HasMeal { get; } + public bool HasCheese { get; } + public bool HasTomato { get; } + public bool HasSalad { get; } + public bool HasMayonnaise { get; } + + internal Hamburger(bool hasBread, bool hasMeal, bool hasCheese, bool hasTomato, bool hasSalad, bool hasMayonnaise) + { + HasBread = hasBread; + HasMeal = hasMeal; + HasCheese = hasCheese; + HasTomato = hasTomato; + HasSalad = hasSalad; + HasMayonnaise = hasMayonnaise; + } + + public override string ToString() + { + return (HasBread ? "Bread " : string.Empty) + + (HasMeal ? "Meal " : string.Empty) + + (HasCheese ? "Cheese " : string.Empty) + + (HasTomato ? "Tomato " : string.Empty) + + (HasSalad ? "Salad " : string.Empty) + + (HasMayonnaise ? "Mayonnaise " : string.Empty); + } + } +} diff --git a/BuilderPattern/BuilderPattern/HamburgerBuilder.cs b/BuilderPattern/BuilderPattern/HamburgerBuilder.cs new file mode 100644 index 0000000..c144bc3 --- /dev/null +++ b/BuilderPattern/BuilderPattern/HamburgerBuilder.cs @@ -0,0 +1,52 @@ +namespace BuilderPattern +{ + public class HamburgerBuilder + { + private bool _hasBread; + private bool _hasMeal; + private bool _hasCheese; + private bool _hasTomato; + private bool _hasSalad; + private bool _hasMayonnaise; + + public HamburgerBuilder Builder => new HamburgerBuilder(); + + public HamburgerBuilder AddBread() + { + _hasBread = true; + return this; + } + + public HamburgerBuilder AddMeal() + { + _hasMeal = true; + return this; + } + + public HamburgerBuilder AddCheese() + { + _hasCheese = true; + return this; + } + + public HamburgerBuilder AddTomato() + { + _hasTomato = true; + return this; + } + + public HamburgerBuilder AddSalad() + { + _hasSalad = true; + return this; + } + + public HamburgerBuilder AddMayonnaise() + { + _hasMayonnaise = true; + return this; + } + + public Hamburger Build() => new Hamburger(_hasBread, _hasMeal, _hasCheese, _hasTomato, _hasSalad, _hasMayonnaise); + } +} diff --git a/BuilderPattern/BuilderPattern/Program.cs b/BuilderPattern/BuilderPattern/Program.cs new file mode 100644 index 0000000..c05ba81 --- /dev/null +++ b/BuilderPattern/BuilderPattern/Program.cs @@ -0,0 +1,26 @@ +using System; + +namespace BuilderPattern +{ + class Program + { + static void Main() + { + var myHamburger = new HamburgerBuilder() + .AddBread() + .AddMeal() + .AddCheese() + .AddTomato() + .AddSalad() + .AddMayonnaise() + .Build(); + Console.WriteLine($"My hamburger: {myHamburger}"); + + var myWifeHamburger = new HamburgerBuilder() + .AddBread() + .AddSalad() + .Build(); + Console.WriteLine($"My wife's hamburger: {myWifeHamburger}"); + } + } +} diff --git a/DesignPatternsDotNetCore.sln b/DesignPatternsDotNetCore.sln index 299d95a..1816eb0 100644 --- a/DesignPatternsDotNetCore.sln +++ b/DesignPatternsDotNetCore.sln @@ -30,7 +30,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FlyweightPattern", "Flyweig EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisitorPattern", "VisitorPattern\VisitorPattern.csproj", "{871F7BE0-B75F-4F9E-9C4D-CE9C4ECE7A88}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FactoryPattern", "FactoryPattern\FactoryPattern.csproj", "{182B58DC-6787-4A09-8BCF-87A96737E5A6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FactoryPattern", "FactoryPattern\FactoryPattern.csproj", "{182B58DC-6787-4A09-8BCF-87A96737E5A6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuilderPattern", "BuilderPattern\BuilderPattern\BuilderPattern.csproj", "{D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -222,6 +224,18 @@ Global {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x64.Build.0 = Release|Any CPU {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.ActiveCfg = Release|Any CPU {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.Build.0 = Release|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|x64.ActiveCfg = Debug|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|x64.Build.0 = Debug|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|x86.ActiveCfg = Debug|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|x86.Build.0 = Debug|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|Any CPU.Build.0 = Release|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|x64.ActiveCfg = Release|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|x64.Build.0 = Release|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|x86.ActiveCfg = Release|Any CPU + {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 5914dbf0cc61afbac81fc3a911cdcd72b9b63b47 Mon Sep 17 00:00:00 2001 From: Ndubuisi Jr Chukuigwe <44238346+NdubuisiJr@users.noreply.github.com> Date: Thu, 17 Oct 2019 12:53:27 +0100 Subject: [PATCH 03/16] Implemented Builder Pattern with regards to issue #8 (#16) * Implemented Builder Pattern with regards to issure #8 * Changed folder structure for BuilderPattern * Added new folder structure to solution * Added Chain of Responsibility design pattern --- .../BuilderPattern.csproj | 0 BuilderPattern/BuilderPattern/Hamburger.cs | 32 ------------ .../BuilderPattern/HamburgerBuilder.cs | 52 ------------------- BuilderPattern/BuilderPattern/Program.cs | 26 ---------- BuilderPattern/Cook.cs | 26 ++++++++++ BuilderPattern/Hamburger.cs | 19 +++++++ BuilderPattern/IBuilder.cs | 9 ++++ BuilderPattern/MyHamburgerBuilder.cs | 25 +++++++++ BuilderPattern/Program.cs | 20 +++++++ BuilderPattern/WifesHamburgerBuilder.cs | 26 ++++++++++ .../AdditionHandler.cs | 20 +++++++ ChainOfResponsibilityPattern/BaseHandler.cs | 11 ++++ .../ChainOfResponsibilityPattern.csproj | 8 +++ ChainOfResponsibilityPattern/IHandler.cs | 6 +++ .../MultiplicationHandler.cs | 16 ++++++ ChainOfResponsibilityPattern/Program.cs | 26 ++++++++++ .../SubtractionHandler.cs | 16 ++++++ DesignPatternsDotNetCore.sln | 44 ++++++++++------ 18 files changed, 257 insertions(+), 125 deletions(-) rename BuilderPattern/{BuilderPattern => }/BuilderPattern.csproj (100%) delete mode 100644 BuilderPattern/BuilderPattern/Hamburger.cs delete mode 100644 BuilderPattern/BuilderPattern/HamburgerBuilder.cs delete mode 100644 BuilderPattern/BuilderPattern/Program.cs create mode 100644 BuilderPattern/Cook.cs create mode 100644 BuilderPattern/Hamburger.cs create mode 100644 BuilderPattern/IBuilder.cs create mode 100644 BuilderPattern/MyHamburgerBuilder.cs create mode 100644 BuilderPattern/Program.cs create mode 100644 BuilderPattern/WifesHamburgerBuilder.cs create mode 100644 ChainOfResponsibilityPattern/AdditionHandler.cs create mode 100644 ChainOfResponsibilityPattern/BaseHandler.cs create mode 100644 ChainOfResponsibilityPattern/ChainOfResponsibilityPattern.csproj create mode 100644 ChainOfResponsibilityPattern/IHandler.cs create mode 100644 ChainOfResponsibilityPattern/MultiplicationHandler.cs create mode 100644 ChainOfResponsibilityPattern/Program.cs create mode 100644 ChainOfResponsibilityPattern/SubtractionHandler.cs diff --git a/BuilderPattern/BuilderPattern/BuilderPattern.csproj b/BuilderPattern/BuilderPattern.csproj similarity index 100% rename from BuilderPattern/BuilderPattern/BuilderPattern.csproj rename to BuilderPattern/BuilderPattern.csproj diff --git a/BuilderPattern/BuilderPattern/Hamburger.cs b/BuilderPattern/BuilderPattern/Hamburger.cs deleted file mode 100644 index 7d3bcc1..0000000 --- a/BuilderPattern/BuilderPattern/Hamburger.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace BuilderPattern -{ - public class Hamburger - { - public bool HasBread { get; } - public bool HasMeal { get; } - public bool HasCheese { get; } - public bool HasTomato { get; } - public bool HasSalad { get; } - public bool HasMayonnaise { get; } - - internal Hamburger(bool hasBread, bool hasMeal, bool hasCheese, bool hasTomato, bool hasSalad, bool hasMayonnaise) - { - HasBread = hasBread; - HasMeal = hasMeal; - HasCheese = hasCheese; - HasTomato = hasTomato; - HasSalad = hasSalad; - HasMayonnaise = hasMayonnaise; - } - - public override string ToString() - { - return (HasBread ? "Bread " : string.Empty) - + (HasMeal ? "Meal " : string.Empty) - + (HasCheese ? "Cheese " : string.Empty) - + (HasTomato ? "Tomato " : string.Empty) - + (HasSalad ? "Salad " : string.Empty) - + (HasMayonnaise ? "Mayonnaise " : string.Empty); - } - } -} diff --git a/BuilderPattern/BuilderPattern/HamburgerBuilder.cs b/BuilderPattern/BuilderPattern/HamburgerBuilder.cs deleted file mode 100644 index c144bc3..0000000 --- a/BuilderPattern/BuilderPattern/HamburgerBuilder.cs +++ /dev/null @@ -1,52 +0,0 @@ -namespace BuilderPattern -{ - public class HamburgerBuilder - { - private bool _hasBread; - private bool _hasMeal; - private bool _hasCheese; - private bool _hasTomato; - private bool _hasSalad; - private bool _hasMayonnaise; - - public HamburgerBuilder Builder => new HamburgerBuilder(); - - public HamburgerBuilder AddBread() - { - _hasBread = true; - return this; - } - - public HamburgerBuilder AddMeal() - { - _hasMeal = true; - return this; - } - - public HamburgerBuilder AddCheese() - { - _hasCheese = true; - return this; - } - - public HamburgerBuilder AddTomato() - { - _hasTomato = true; - return this; - } - - public HamburgerBuilder AddSalad() - { - _hasSalad = true; - return this; - } - - public HamburgerBuilder AddMayonnaise() - { - _hasMayonnaise = true; - return this; - } - - public Hamburger Build() => new Hamburger(_hasBread, _hasMeal, _hasCheese, _hasTomato, _hasSalad, _hasMayonnaise); - } -} diff --git a/BuilderPattern/BuilderPattern/Program.cs b/BuilderPattern/BuilderPattern/Program.cs deleted file mode 100644 index c05ba81..0000000 --- a/BuilderPattern/BuilderPattern/Program.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; - -namespace BuilderPattern -{ - class Program - { - static void Main() - { - var myHamburger = new HamburgerBuilder() - .AddBread() - .AddMeal() - .AddCheese() - .AddTomato() - .AddSalad() - .AddMayonnaise() - .Build(); - Console.WriteLine($"My hamburger: {myHamburger}"); - - var myWifeHamburger = new HamburgerBuilder() - .AddBread() - .AddSalad() - .Build(); - Console.WriteLine($"My wife's hamburger: {myWifeHamburger}"); - } - } -} diff --git a/BuilderPattern/Cook.cs b/BuilderPattern/Cook.cs new file mode 100644 index 0000000..dd40620 --- /dev/null +++ b/BuilderPattern/Cook.cs @@ -0,0 +1,26 @@ +namespace BuilderPattern { + + // This class can also be called the Director + public class Cook { + private IBuilder _builder; + public Cook(IBuilder builder) { + AcceptBuilder(builder); + } + + public void ChangeBuilder(IBuilder builder) { + AcceptBuilder(builder); + } + + public Hamburger Build() { + _builder.AddIngredients(); + _builder.AddShape(); + _builder.AddSize(); + return _builder.Build(); + } + + private void AcceptBuilder(IBuilder builder) { + _builder = builder; + _builder.Reset(); + } + } +} diff --git a/BuilderPattern/Hamburger.cs b/BuilderPattern/Hamburger.cs new file mode 100644 index 0000000..604f138 --- /dev/null +++ b/BuilderPattern/Hamburger.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; + +namespace BuilderPattern +{ + public class Hamburger + { + public int Size { get; set; } + public string Shape { get; set; } + public string[] Ingredients { get; set; } + public override string ToString() + { + var hamburger=""; + foreach (var ingredient in Ingredients) { + hamburger += $"{ingredient} "; + } + return $"Ingredients: {hamburger}, Size: {Size}, Shape: {Shape}"; + } + } +} diff --git a/BuilderPattern/IBuilder.cs b/BuilderPattern/IBuilder.cs new file mode 100644 index 0000000..34d96a2 --- /dev/null +++ b/BuilderPattern/IBuilder.cs @@ -0,0 +1,9 @@ +namespace BuilderPattern { + public interface IBuilder { + void AddIngredients(); + void AddShape(); + void AddSize(); + void Reset(); + Hamburger Build(); + } +} diff --git a/BuilderPattern/MyHamburgerBuilder.cs b/BuilderPattern/MyHamburgerBuilder.cs new file mode 100644 index 0000000..61782f7 --- /dev/null +++ b/BuilderPattern/MyHamburgerBuilder.cs @@ -0,0 +1,25 @@ +namespace BuilderPattern +{ + public class MyHamburgerBuilder : IBuilder { + private Hamburger _hamburger; + public void AddIngredients() { + _hamburger.Ingredients = new string[] { "Bread", "Meat", "Tomato", "Salad", "Mayonnaise" }; + } + + public void AddShape() { + _hamburger.Shape = "Kite"; + } + + public void AddSize() { + _hamburger.Size = 10; //inches + } + public void Reset() { + _hamburger = new Hamburger(); + } + + public Hamburger Build() { + return _hamburger; + } + + } +} diff --git a/BuilderPattern/Program.cs b/BuilderPattern/Program.cs new file mode 100644 index 0000000..dc14219 --- /dev/null +++ b/BuilderPattern/Program.cs @@ -0,0 +1,20 @@ +using System; + +namespace BuilderPattern +{ + class Program + { + static void Main() + { + var builder = new MyHamburgerBuilder(); + var cook = new Cook(builder); + var myHamburger = cook.Build(); + + cook.ChangeBuilder(new WifesHamburgerBuilder()); + var wifesHamburger = cook.Build(); + + Console.WriteLine($"My Hamburger: {myHamburger}"); + Console.WriteLine($"My Wife's Hamburger: {wifesHamburger}"); + } + } +} diff --git a/BuilderPattern/WifesHamburgerBuilder.cs b/BuilderPattern/WifesHamburgerBuilder.cs new file mode 100644 index 0000000..9724fc6 --- /dev/null +++ b/BuilderPattern/WifesHamburgerBuilder.cs @@ -0,0 +1,26 @@ +using System; + +namespace BuilderPattern { + + public class WifesHamburgerBuilder : IBuilder { + private Hamburger _hamburger; + public void AddIngredients() { + _hamburger.Ingredients = new string[] { "Bread", "Salad" }; + } + + public void AddShape() { + _hamburger.Shape = "Cuboid"; + } + + public void AddSize() { + _hamburger.Size = 6; //inches + } + + public void Reset() { + _hamburger = new Hamburger(); + } + public Hamburger Build() { + return _hamburger; + } + } +} diff --git a/ChainOfResponsibilityPattern/AdditionHandler.cs b/ChainOfResponsibilityPattern/AdditionHandler.cs new file mode 100644 index 0000000..27f7bbe --- /dev/null +++ b/ChainOfResponsibilityPattern/AdditionHandler.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ChainOfResponsibilityPattern { + public class AdditionHandler : BaseHandler { + public override double? Handle(double[] values, string action) { + if (action.ToLower() == "add") { + double result=0.0; + foreach (var value in values) { + result += value; + } + return result; + } + else { + return _nextInLine?.Handle(values,action); + } + } + } +} diff --git a/ChainOfResponsibilityPattern/BaseHandler.cs b/ChainOfResponsibilityPattern/BaseHandler.cs new file mode 100644 index 0000000..b24a593 --- /dev/null +++ b/ChainOfResponsibilityPattern/BaseHandler.cs @@ -0,0 +1,11 @@ +namespace ChainOfResponsibilityPattern { + public abstract class BaseHandler : IHandler { + public void AddChain(IHandler handler) { + _nextInLine = handler; + } + + public abstract double? Handle(double[] values, string action); + + protected IHandler _nextInLine; + } +} diff --git a/ChainOfResponsibilityPattern/ChainOfResponsibilityPattern.csproj b/ChainOfResponsibilityPattern/ChainOfResponsibilityPattern.csproj new file mode 100644 index 0000000..23df604 --- /dev/null +++ b/ChainOfResponsibilityPattern/ChainOfResponsibilityPattern.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.1 + + + diff --git a/ChainOfResponsibilityPattern/IHandler.cs b/ChainOfResponsibilityPattern/IHandler.cs new file mode 100644 index 0000000..f263adb --- /dev/null +++ b/ChainOfResponsibilityPattern/IHandler.cs @@ -0,0 +1,6 @@ +namespace ChainOfResponsibilityPattern { + public interface IHandler { + void AddChain(IHandler handler); + double? Handle(double[] values, string action); + } +} diff --git a/ChainOfResponsibilityPattern/MultiplicationHandler.cs b/ChainOfResponsibilityPattern/MultiplicationHandler.cs new file mode 100644 index 0000000..cf99553 --- /dev/null +++ b/ChainOfResponsibilityPattern/MultiplicationHandler.cs @@ -0,0 +1,16 @@ +namespace ChainOfResponsibilityPattern { + public class MultiplicationHandler : BaseHandler { + public override double? Handle(double[] values, string action) { + if (action.ToLower() == "multiply") { + var result = 1.0; + foreach (var value in values) { + result *= value; + } + return result; + } + else { + return _nextInLine?.Handle(values, action); + } + } + } +} diff --git a/ChainOfResponsibilityPattern/Program.cs b/ChainOfResponsibilityPattern/Program.cs new file mode 100644 index 0000000..2ea5d2d --- /dev/null +++ b/ChainOfResponsibilityPattern/Program.cs @@ -0,0 +1,26 @@ +using System; + +namespace ChainOfResponsibilityPattern { + class Program { + static void Main(string[] args) { + //create handlers + var additionHandler = new AdditionHandler(); + var subtractionHandler = new SubtractionHandler(); + var multiplicationHander = new MultiplicationHandler(); + //create chain + subtractionHandler.AddChain(multiplicationHander); + additionHandler.AddChain(subtractionHandler); + //Execution + double[] numbers = new double[] { 2, 3, 4, 5 }; + var additionResult = additionHandler.Handle(numbers, "Add"); + var subtractionResult = additionHandler.Handle(numbers, "Minus"); + var multResult = additionHandler.Handle(numbers, "Multiply"); + var divisionResult = additionHandler.Handle(numbers, "divide"); // Divide is not in the chain!!! + + Console.WriteLine("Addition = {0}",additionResult); + Console.WriteLine("Subtraction = {0}", subtractionResult); + Console.WriteLine("Multiplication = {0}", multResult); + Console.WriteLine("Division = {0}", divisionResult); + } + } +} diff --git a/ChainOfResponsibilityPattern/SubtractionHandler.cs b/ChainOfResponsibilityPattern/SubtractionHandler.cs new file mode 100644 index 0000000..7a5e5dd --- /dev/null +++ b/ChainOfResponsibilityPattern/SubtractionHandler.cs @@ -0,0 +1,16 @@ +namespace ChainOfResponsibilityPattern { + public class SubtractionHandler : BaseHandler { + public override double? Handle(double[] values, string action) { + if (action.ToLower() == "minus") { + var result = values[0]; + for (int i = 1; i < values.Length; i++) { + result -= values[i]; + } + return result; + } + else { + return _nextInLine?.Handle(values, action); + } + } + } +} diff --git a/DesignPatternsDotNetCore.sln b/DesignPatternsDotNetCore.sln index 1816eb0..3188dab 100644 --- a/DesignPatternsDotNetCore.sln +++ b/DesignPatternsDotNetCore.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26124.0 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29025.244 MinimumVisualStudioVersion = 15.0.26124.0 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdapterPattern", "AdapterPattern\AdapterPattern.csproj", "{79553F75-E8DC-4988-B511-A79CC6A9CDF7}" EndProject @@ -32,7 +32,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisitorPattern", "VisitorPa EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FactoryPattern", "FactoryPattern\FactoryPattern.csproj", "{182B58DC-6787-4A09-8BCF-87A96737E5A6}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuilderPattern", "BuilderPattern\BuilderPattern\BuilderPattern.csproj", "{D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuilderPattern", "BuilderPattern\BuilderPattern.csproj", "{9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChainOfResponsibilityPattern", "ChainOfResponsibilityPattern\ChainOfResponsibilityPattern.csproj", "{B703B66A-310A-45BC-94C9-EEEB57570E16}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -224,18 +226,30 @@ Global {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x64.Build.0 = Release|Any CPU {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.ActiveCfg = Release|Any CPU {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.Build.0 = Release|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|x64.ActiveCfg = Debug|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|x64.Build.0 = Debug|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|x86.ActiveCfg = Debug|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Debug|x86.Build.0 = Debug|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|Any CPU.Build.0 = Release|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|x64.ActiveCfg = Release|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|x64.Build.0 = Release|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|x86.ActiveCfg = Release|Any CPU - {D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}.Release|x86.Build.0 = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x64.ActiveCfg = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x64.Build.0 = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x86.ActiveCfg = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x86.Build.0 = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|Any CPU.Build.0 = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x64.ActiveCfg = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x64.Build.0 = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x86.ActiveCfg = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x86.Build.0 = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x64.ActiveCfg = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x64.Build.0 = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x86.ActiveCfg = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x86.Build.0 = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|Any CPU.Build.0 = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x64.ActiveCfg = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x64.Build.0 = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x86.ActiveCfg = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From b022771886d1d838501549e1e0a1a180d5e01763 Mon Sep 17 00:00:00 2001 From: Oleg Date: Sat, 2 May 2020 21:05:54 +0300 Subject: [PATCH 04/16] mediatorPatternAdded (#17) Co-authored-by: o.musin Co-authored-by: Abishek Aditya --- DesignPatternsDotNetCore.sln | 38 ++++++++++++++++++++++++++ MediatorPattern/Colleague.cs | 14 ++++++++++ MediatorPattern/Customer.cs | 14 ++++++++++ MediatorPattern/ManagerMediator.cs | 22 +++++++++++++++ MediatorPattern/Mediator.cs | 7 +++++ MediatorPattern/MediatorPattern.csproj | 8 ++++++ MediatorPattern/Program.cs | 21 ++++++++++++++ MediatorPattern/Programmer.cs | 14 ++++++++++ MediatorPattern/Tester.cs | 14 ++++++++++ README.md | 1 + 10 files changed, 153 insertions(+) create mode 100644 MediatorPattern/Colleague.cs create mode 100644 MediatorPattern/Customer.cs create mode 100644 MediatorPattern/ManagerMediator.cs create mode 100644 MediatorPattern/Mediator.cs create mode 100644 MediatorPattern/MediatorPattern.csproj create mode 100644 MediatorPattern/Program.cs create mode 100644 MediatorPattern/Programmer.cs create mode 100644 MediatorPattern/Tester.cs diff --git a/DesignPatternsDotNetCore.sln b/DesignPatternsDotNetCore.sln index 4cef771..76cc66d 100644 --- a/DesignPatternsDotNetCore.sln +++ b/DesignPatternsDotNetCore.sln @@ -36,6 +36,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrototypePattern", "Prototy EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuilderPattern", "BuilderPattern\BuilderPattern\BuilderPattern.csproj", "{D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediatorPattern", "MediatorPattern\MediatorPattern.csproj", "{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -226,6 +228,42 @@ Global {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x64.Build.0 = Release|Any CPU {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.ActiveCfg = Release|Any CPU {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.Build.0 = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x64.ActiveCfg = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x64.Build.0 = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x86.ActiveCfg = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x86.Build.0 = Debug|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|Any CPU.Build.0 = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x64.ActiveCfg = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x64.Build.0 = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x86.ActiveCfg = Release|Any CPU + {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x86.Build.0 = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x64.ActiveCfg = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x64.Build.0 = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x86.ActiveCfg = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x86.Build.0 = Debug|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|Any CPU.Build.0 = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x64.ActiveCfg = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x64.Build.0 = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x86.ActiveCfg = Release|Any CPU + {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x86.Build.0 = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x64.ActiveCfg = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x64.Build.0 = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x86.ActiveCfg = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x86.Build.0 = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|Any CPU.Build.0 = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x64.ActiveCfg = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x64.Build.0 = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x86.ActiveCfg = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x86.Build.0 = Release|Any CPU {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|Any CPU.Build.0 = Debug|Any CPU {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|x64.ActiveCfg = Debug|Any CPU diff --git a/MediatorPattern/Colleague.cs b/MediatorPattern/Colleague.cs new file mode 100644 index 0000000..78c694a --- /dev/null +++ b/MediatorPattern/Colleague.cs @@ -0,0 +1,14 @@ +namespace MediatorPattern +{ + abstract class Colleague + { + protected Mediator mediator; + + public Colleague(Mediator mediator) => this.mediator = mediator; + + public virtual void Send(string message) => this.mediator.Send(message, this); + + public abstract void Notify(string message); + + } +} \ No newline at end of file diff --git a/MediatorPattern/Customer.cs b/MediatorPattern/Customer.cs new file mode 100644 index 0000000..774863c --- /dev/null +++ b/MediatorPattern/Customer.cs @@ -0,0 +1,14 @@ +using System; + +namespace MediatorPattern +{ + class Customer : Colleague + { + public Customer(Mediator mediator) : base(mediator) {} + + public override void Notify(string message) + { + Console.WriteLine($"Message to customer: {message}"); + } + } +} \ No newline at end of file diff --git a/MediatorPattern/ManagerMediator.cs b/MediatorPattern/ManagerMediator.cs new file mode 100644 index 0000000..ceda018 --- /dev/null +++ b/MediatorPattern/ManagerMediator.cs @@ -0,0 +1,22 @@ +namespace MediatorPattern +{ + class ManagerMediator : Mediator + { + public Colleague Customer { get; set; } + public Colleague Programmer { get; set; } + public Colleague Tester { get; set; } + + public override void Send(string message, Colleague colleague) + { + if (colleague == Customer) + { + Programmer.Notify(message); + } + else if (colleague == Programmer) + { + Tester.Notify(message); + } + else Customer.Notify(message); + } + } +} \ No newline at end of file diff --git a/MediatorPattern/Mediator.cs b/MediatorPattern/Mediator.cs new file mode 100644 index 0000000..2646a13 --- /dev/null +++ b/MediatorPattern/Mediator.cs @@ -0,0 +1,7 @@ +namespace MediatorPattern +{ + abstract class Mediator + { + public abstract void Send(string message, Colleague colleague); + } +} \ No newline at end of file diff --git a/MediatorPattern/MediatorPattern.csproj b/MediatorPattern/MediatorPattern.csproj new file mode 100644 index 0000000..51b7f6c --- /dev/null +++ b/MediatorPattern/MediatorPattern.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.1 + + + diff --git a/MediatorPattern/Program.cs b/MediatorPattern/Program.cs new file mode 100644 index 0000000..9276771 --- /dev/null +++ b/MediatorPattern/Program.cs @@ -0,0 +1,21 @@ +using System; + +namespace MediatorPattern +{ + class Program + { + static void Main(string[] args) + { + var mediator = new ManagerMediator(); + var customer = new Customer(mediator); + var programmer = new Programmer(mediator); + var tester = new Tester(mediator); + mediator.Customer = customer; + mediator.Programmer = programmer; + mediator.Tester = tester; + customer.Send("We have an order, need to make a program"); + programmer.Send("I have done program, need to test it"); + tester.Send("I have done testing, here is ready program for you"); + } + } +} \ No newline at end of file diff --git a/MediatorPattern/Programmer.cs b/MediatorPattern/Programmer.cs new file mode 100644 index 0000000..275214e --- /dev/null +++ b/MediatorPattern/Programmer.cs @@ -0,0 +1,14 @@ +using System; + +namespace MediatorPattern +{ + class Programmer : Colleague + { + public Programmer(Mediator mediator) : base(mediator) {} + + public override void Notify(string message) + { + Console.WriteLine($"Message to programmer: {message}"); + } + } +} \ No newline at end of file diff --git a/MediatorPattern/Tester.cs b/MediatorPattern/Tester.cs new file mode 100644 index 0000000..e218496 --- /dev/null +++ b/MediatorPattern/Tester.cs @@ -0,0 +1,14 @@ +using System; + +namespace MediatorPattern +{ + class Tester : Colleague + { + public Tester(Mediator mediator) : base(mediator) {} + + public override void Notify(string message) + { + Console.WriteLine($"Message to tester: {message}"); + } + } +} \ No newline at end of file diff --git a/README.md b/README.md index 5f08678..8cdcb6f 100644 --- a/README.md +++ b/README.md @@ -31,3 +31,4 @@ There are three kinds of Design Patterns * [Strategy](/StrategyPattern) * [Template](/TemplatePattern) * [Visitor](/VisitorPattern) +* [Mediator](/MediatorPattern) From fce4a2a310874aeb18de86f0149faca550087d51 Mon Sep 17 00:00:00 2001 From: Abishek Aditya Date: Sat, 2 May 2020 23:46:47 +0530 Subject: [PATCH 05/16] Fix builder pattern folder path --- DesignPatternsDotNetCore.sln | 70 +++++++++++++++--------------------- 1 file changed, 29 insertions(+), 41 deletions(-) diff --git a/DesignPatternsDotNetCore.sln b/DesignPatternsDotNetCore.sln index 76cc66d..68fbfab 100644 --- a/DesignPatternsDotNetCore.sln +++ b/DesignPatternsDotNetCore.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26124.0 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29920.165 MinimumVisualStudioVersion = 15.0.26124.0 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdapterPattern", "AdapterPattern\AdapterPattern.csproj", "{79553F75-E8DC-4988-B511-A79CC6A9CDF7}" EndProject @@ -32,11 +32,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisitorPattern", "VisitorPa EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FactoryPattern", "FactoryPattern\FactoryPattern.csproj", "{182B58DC-6787-4A09-8BCF-87A96737E5A6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrototypePattern", "PrototypePattern\PrototypePattern.csproj", "{2DC00E3D-2099-4C58-B98F-B6B3F285739F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrototypePattern", "PrototypePattern\PrototypePattern.csproj", "{2DC00E3D-2099-4C58-B98F-B6B3F285739F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuilderPattern", "BuilderPattern\BuilderPattern\BuilderPattern.csproj", "{D8B3C6D1-4AAD-4ED4-BFAE-582A1B43389C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MediatorPattern", "MediatorPattern\MediatorPattern.csproj", "{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediatorPattern", "MediatorPattern\MediatorPattern.csproj", "{82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuilderPattern", "BuilderPattern\BuilderPattern.csproj", "{274786D8-2E30-40D7-81B5-DFA3872CF9B6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -228,42 +228,6 @@ Global {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x64.Build.0 = Release|Any CPU {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.ActiveCfg = Release|Any CPU {182B58DC-6787-4A09-8BCF-87A96737E5A6}.Release|x86.Build.0 = Release|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x64.ActiveCfg = Debug|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x64.Build.0 = Debug|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x86.ActiveCfg = Debug|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Debug|x86.Build.0 = Debug|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|Any CPU.Build.0 = Release|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x64.ActiveCfg = Release|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x64.Build.0 = Release|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x86.ActiveCfg = Release|Any CPU - {9C400147-84CB-40B2-8E82-6C9A4A1DF4E9}.Release|x86.Build.0 = Release|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x64.ActiveCfg = Debug|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x64.Build.0 = Debug|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x86.ActiveCfg = Debug|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Debug|x86.Build.0 = Debug|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|Any CPU.Build.0 = Release|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x64.ActiveCfg = Release|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x64.Build.0 = Release|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x86.ActiveCfg = Release|Any CPU - {B703B66A-310A-45BC-94C9-EEEB57570E16}.Release|x86.Build.0 = Release|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x64.ActiveCfg = Debug|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x64.Build.0 = Debug|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x86.ActiveCfg = Debug|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x86.Build.0 = Debug|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|Any CPU.Build.0 = Release|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x64.ActiveCfg = Release|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x64.Build.0 = Release|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x86.ActiveCfg = Release|Any CPU - {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x86.Build.0 = Release|Any CPU {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|Any CPU.Build.0 = Debug|Any CPU {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -276,6 +240,30 @@ Global {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Release|x64.Build.0 = Release|Any CPU {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Release|x86.ActiveCfg = Release|Any CPU {2DC00E3D-2099-4C58-B98F-B6B3F285739F}.Release|x86.Build.0 = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x64.ActiveCfg = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x64.Build.0 = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x86.ActiveCfg = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Debug|x86.Build.0 = Debug|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|Any CPU.Build.0 = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x64.ActiveCfg = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x64.Build.0 = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x86.ActiveCfg = Release|Any CPU + {82A66FF6-5D66-4E39-8FF8-C8EBA0EB3A2D}.Release|x86.Build.0 = Release|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Debug|x64.ActiveCfg = Debug|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Debug|x64.Build.0 = Debug|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Debug|x86.ActiveCfg = Debug|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Debug|x86.Build.0 = Debug|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Release|Any CPU.Build.0 = Release|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Release|x64.ActiveCfg = Release|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Release|x64.Build.0 = Release|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Release|x86.ActiveCfg = Release|Any CPU + {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 64075c9041f19bb32ce5d0a5aee83d443face21d Mon Sep 17 00:00:00 2001 From: YaraYasser Date: Sat, 9 Jan 2021 15:37:26 +0200 Subject: [PATCH 06/16] adding Proxy Pattern which is structural design pattern (#19) --- DesignPatternsDotNetCore.sln | 14 ++++++++ FlyweightPattern/ProxyPattern/Dimmer.cs | 18 ++++++++++ FlyweightPattern/ProxyPattern/Dvd.cs | 11 ++++++ FlyweightPattern/ProxyPattern/DvdPlayer.cs | 30 ++++++++++++++++ .../ProxyPattern/HometheaterFacade.cs | 36 +++++++++++++++++++ FlyweightPattern/ProxyPattern/Program.cs | 23 ++++++++++++ .../ProxyPattern/ProxyPattern.csproj | 8 +++++ ProxyPattern/Image.cs | 8 +++++ ProxyPattern/Program.cs | 19 ++++++++++ ProxyPattern/ProxyImage.cs | 23 ++++++++++++ ProxyPattern/ProxyPattern.csproj | 8 +++++ ProxyPattern/RealImage.cs | 27 ++++++++++++++ README.md | 1 + 13 files changed, 226 insertions(+) create mode 100644 FlyweightPattern/ProxyPattern/Dimmer.cs create mode 100644 FlyweightPattern/ProxyPattern/Dvd.cs create mode 100644 FlyweightPattern/ProxyPattern/DvdPlayer.cs create mode 100644 FlyweightPattern/ProxyPattern/HometheaterFacade.cs create mode 100644 FlyweightPattern/ProxyPattern/Program.cs create mode 100644 FlyweightPattern/ProxyPattern/ProxyPattern.csproj create mode 100644 ProxyPattern/Image.cs create mode 100644 ProxyPattern/Program.cs create mode 100644 ProxyPattern/ProxyImage.cs create mode 100644 ProxyPattern/ProxyPattern.csproj create mode 100644 ProxyPattern/RealImage.cs diff --git a/DesignPatternsDotNetCore.sln b/DesignPatternsDotNetCore.sln index 68fbfab..5f9a763 100644 --- a/DesignPatternsDotNetCore.sln +++ b/DesignPatternsDotNetCore.sln @@ -38,6 +38,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MediatorPattern", "Mediator EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuilderPattern", "BuilderPattern\BuilderPattern.csproj", "{274786D8-2E30-40D7-81B5-DFA3872CF9B6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProxyPattern", "ProxyPattern\ProxyPattern.csproj", "{0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -264,6 +266,18 @@ Global {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Release|x64.Build.0 = Release|Any CPU {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Release|x86.ActiveCfg = Release|Any CPU {274786D8-2E30-40D7-81B5-DFA3872CF9B6}.Release|x86.Build.0 = Release|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Debug|x64.ActiveCfg = Debug|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Debug|x64.Build.0 = Debug|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Debug|x86.ActiveCfg = Debug|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Debug|x86.Build.0 = Debug|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|Any CPU.Build.0 = Release|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|x64.ActiveCfg = Release|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|x64.Build.0 = Release|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|x86.ActiveCfg = Release|Any CPU + {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/FlyweightPattern/ProxyPattern/Dimmer.cs b/FlyweightPattern/ProxyPattern/Dimmer.cs new file mode 100644 index 0000000..d9cfef3 --- /dev/null +++ b/FlyweightPattern/ProxyPattern/Dimmer.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FacadePattern +{ + public class Dimmer + { + internal void Dim(int val) + { + Console.WriteLine(val == 10 ? "Turning Lights On" : $"Dimming lights to {val}"); + } + + internal void Off() => Console.WriteLine("Switching off lights"); + } +} diff --git a/FlyweightPattern/ProxyPattern/Dvd.cs b/FlyweightPattern/ProxyPattern/Dvd.cs new file mode 100644 index 0000000..b247c62 --- /dev/null +++ b/FlyweightPattern/ProxyPattern/Dvd.cs @@ -0,0 +1,11 @@ +namespace FacadePattern +{ + public class Dvd + { + public Dvd(string name) + { + Movie = name; + } + public string Movie { get; set; } + } +} \ No newline at end of file diff --git a/FlyweightPattern/ProxyPattern/DvdPlayer.cs b/FlyweightPattern/ProxyPattern/DvdPlayer.cs new file mode 100644 index 0000000..ffaa58c --- /dev/null +++ b/FlyweightPattern/ProxyPattern/DvdPlayer.cs @@ -0,0 +1,30 @@ +using System; + +namespace FacadePattern +{ + public class DvdPlayer + { + private Dvd _dvd; + private int _time = 0; + public void On() => Console.WriteLine("DVD Player powered on"); + + public void Insert(Dvd dvd) + { + _dvd = dvd; + Console.WriteLine($"Inserting {dvd.Movie}"); + + } + + public void Play() => Console.WriteLine($"Playing {_dvd.Movie}"); + + public void Pause() + { + Console.WriteLine($"Pausing at {_time = (new Random()).Next(_time,_time + 120)}"); + } + + public void Resume() + { + Console.WriteLine($"Resuming from {_time}"); + } + } +} \ No newline at end of file diff --git a/FlyweightPattern/ProxyPattern/HometheaterFacade.cs b/FlyweightPattern/ProxyPattern/HometheaterFacade.cs new file mode 100644 index 0000000..2d09049 --- /dev/null +++ b/FlyweightPattern/ProxyPattern/HometheaterFacade.cs @@ -0,0 +1,36 @@ +namespace FacadePattern +{ + public class HomeTheatreFacade + { + private Dimmer _dimmer; + private Dvd _dvd; + private DvdPlayer _dvdPlayer; + + public HomeTheatreFacade(Dimmer dimmer,Dvd dvd, DvdPlayer dvdPlayer) + { + _dvd = dvd; + _dimmer = dimmer; + _dvdPlayer = dvdPlayer; + } + + public void WatchMovie() + { + _dimmer.Dim(5); + _dvdPlayer.On(); + _dvdPlayer.Insert(_dvd); + _dvdPlayer.Play(); + } + + public void Pause() + { + _dimmer.Dim(10); + _dvdPlayer.Pause(); + } + + public void Resume() + { + _dimmer.Dim(5); + _dvdPlayer.Resume(); + } + } +} \ No newline at end of file diff --git a/FlyweightPattern/ProxyPattern/Program.cs b/FlyweightPattern/ProxyPattern/Program.cs new file mode 100644 index 0000000..a695029 --- /dev/null +++ b/FlyweightPattern/ProxyPattern/Program.cs @@ -0,0 +1,23 @@ +using System; + +namespace FacadePattern +{ + internal static class Program + { + private static void Main() + { + var dimmer = new Dimmer(); + var dvdPlayer = new DvdPlayer(); + var dvd = new Dvd("Gone with the Wind 2 : Electric Bugaloo"); + var homeTheater = new HomeTheatreFacade(dimmer,dvd,dvdPlayer); + + homeTheater.WatchMovie(); + Console.WriteLine(); + homeTheater.Pause(); + Console.WriteLine(); + homeTheater.Resume(); + Console.WriteLine(); + homeTheater.Pause(); + } + } +} diff --git a/FlyweightPattern/ProxyPattern/ProxyPattern.csproj b/FlyweightPattern/ProxyPattern/ProxyPattern.csproj new file mode 100644 index 0000000..ce1697a --- /dev/null +++ b/FlyweightPattern/ProxyPattern/ProxyPattern.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.0 + + + diff --git a/ProxyPattern/Image.cs b/ProxyPattern/Image.cs new file mode 100644 index 0000000..9c1d7b0 --- /dev/null +++ b/ProxyPattern/Image.cs @@ -0,0 +1,8 @@ +namespace ProxyPattern +{ + public interface Image + { + void display(); + + } +} diff --git a/ProxyPattern/Program.cs b/ProxyPattern/Program.cs new file mode 100644 index 0000000..b0cedf6 --- /dev/null +++ b/ProxyPattern/Program.cs @@ -0,0 +1,19 @@ +using System; + +namespace ProxyPattern +{ + class Program + { + static void Main(string[] args) + { + Image image = new ProxyImage("testImage.jpg"); + + //image will be loaded from disk + image.display(); + Console.WriteLine(""); + + //image will not be loaded from disk + image.display(); + } + } +} diff --git a/ProxyPattern/ProxyImage.cs b/ProxyPattern/ProxyImage.cs new file mode 100644 index 0000000..bdab6de --- /dev/null +++ b/ProxyPattern/ProxyImage.cs @@ -0,0 +1,23 @@ +namespace ProxyPattern +{ + public class ProxyImage : Image + { + private RealImage _realImage; + private string _fileName; + + public ProxyImage(string fileName) + { + _fileName = fileName; + } + + + public void display() + { + if (_realImage == null) + { + _realImage = new RealImage(_fileName); + } + _realImage.display(); + } + } +} \ No newline at end of file diff --git a/ProxyPattern/ProxyPattern.csproj b/ProxyPattern/ProxyPattern.csproj new file mode 100644 index 0000000..c73e0d1 --- /dev/null +++ b/ProxyPattern/ProxyPattern.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp3.1 + + + diff --git a/ProxyPattern/RealImage.cs b/ProxyPattern/RealImage.cs new file mode 100644 index 0000000..0405fad --- /dev/null +++ b/ProxyPattern/RealImage.cs @@ -0,0 +1,27 @@ +using System; + +namespace ProxyPattern +{ + + public class RealImage : Image + { + + private string _fileName; + + public RealImage(string fileName) + { + _fileName = fileName; + loadFromDisk(_fileName); + } + + public void display() + { + Console.WriteLine("Displaying " + _fileName); + } + + private void loadFromDisk(string fileName) + { + Console.WriteLine("Loading " + fileName); + } +} +} \ No newline at end of file diff --git a/README.md b/README.md index 8cdcb6f..238a5db 100644 --- a/README.md +++ b/README.md @@ -32,3 +32,4 @@ There are three kinds of Design Patterns * [Template](/TemplatePattern) * [Visitor](/VisitorPattern) * [Mediator](/MediatorPattern) +* [Proxy] (/ProxyPattern) \ No newline at end of file From 174ab9f4e82657205d4b3add3232316355097ade Mon Sep 17 00:00:00 2001 From: Hamed Moghadasi Date: Sat, 6 Mar 2021 07:22:32 +0330 Subject: [PATCH 07/16] Code Cleanup ! (#21) --- AdapterPattern/MallardDuck.cs | 4 --- AdapterPattern/Program.cs | 3 +-- AdapterPattern/TurkeyAdapter.cs | 2 -- AdapterPattern/WildTurkey.cs | 4 --- BridgePattern/FlyingEnchantment.cs | 2 +- BridgePattern/Hammer.cs | 2 +- BridgePattern/Program.cs | 2 +- BridgePattern/SoulEatingEnchantment.cs | 2 +- BridgePattern/Sword.cs | 2 +- BuilderPattern/Cook.cs | 18 ++++++++----- BuilderPattern/Hamburger.cs | 8 +++--- BuilderPattern/IBuilder.cs | 6 +++-- BuilderPattern/MyHamburgerBuilder.cs | 18 ++++++++----- BuilderPattern/WifesHamburgerBuilder.cs | 23 +++++++++------- CommandPattern/Program.cs | 6 ++--- CompositePattern/Menu.cs | 2 +- CompositePattern/MenuComponent.cs | 2 +- CompositePattern/MenuItem.cs | 2 +- CompositePattern/Program.cs | 8 +++--- DecoratorPattern/MochaCondiment.cs | 5 ++-- DecoratorPattern/WhipCondiment.cs | 2 +- FacadePattern/Dimmer.cs | 4 --- FacadePattern/DvdPlayer.cs | 4 +-- FacadePattern/HometheaterFacade.cs | 4 +-- FacadePattern/Program.cs | 2 +- .../Factory Method/ChicagoPizzaFactory.cs | 2 +- .../Factory Method/NYPizzaFactory.cs | 6 ++--- FactoryPattern/Pizza/CheesePizza.cs | 2 +- FlyweightPattern/BubbleMilkTea.cs | 2 +- FlyweightPattern/BubbleTeaShop.cs | 3 +-- FlyweightPattern/CoconutMilkTea.cs | 4 +-- FlyweightPattern/FoamMilkTea.cs | 6 ++--- FlyweightPattern/OolingMilkTea.cs | 2 +- FlyweightPattern/Program.cs | 4 +-- FlyweightPattern/ProxyPattern/Dimmer.cs | 4 --- FlyweightPattern/ProxyPattern/DvdPlayer.cs | 4 +-- .../ProxyPattern/HometheaterFacade.cs | 4 +-- FlyweightPattern/ProxyPattern/Program.cs | 2 +- IteratorPattern/BreakfastMenu.cs | 8 +++--- IteratorPattern/BreakfastMenuEnum.cs | 2 +- IteratorPattern/BreakfastMenuIterator.cs | 4 +-- IteratorPattern/Client.cs | 2 +- IteratorPattern/DinnerMenu.cs | 2 +- IteratorPattern/DinnerMenuEnum.cs | 1 - IteratorPattern/DinnerMenuIterator.cs | 1 - IteratorPattern/Menu.cs | 2 +- IteratorPattern/Program.cs | 4 +-- MediatorPattern/Customer.cs | 2 +- MediatorPattern/Program.cs | 4 +-- MediatorPattern/Programmer.cs | 2 +- MediatorPattern/Tester.cs | 2 +- ObserverPattern/WeatherMonitor.cs | 6 ++--- ProxyPattern/Image.cs | 2 +- ProxyPattern/RealImage.cs | 26 +++++++++---------- SingletonPattern/ChocolateBoiler.cs | 4 +-- SingletonPattern/Program.cs | 2 +- StatePattern/HasQuarterState.cs | 2 +- StatePattern/NoQuarterState.cs | 2 +- StatePattern/SoldState.cs | 2 +- StrategyPattern/Program.cs | 5 ++-- StrategyPattern/QuackNormal.cs | 2 +- TemplatePattern/Program.cs | 2 +- VisitorPattern/Apartment.cs | 2 +- VisitorPattern/ApartmentVisitor.cs | 2 +- VisitorPattern/Bedroom.cs | 2 +- VisitorPattern/BedroomVisitor.cs | 2 +- VisitorPattern/LivingRoom.cs | 2 +- VisitorPattern/LivingRoomVisitor.cs | 2 +- VisitorPattern/Program.cs | 2 +- VisitorPattern/Studio.cs | 2 +- VisitorPattern/StudioVisitor.cs | 2 +- 71 files changed, 142 insertions(+), 149 deletions(-) diff --git a/AdapterPattern/MallardDuck.cs b/AdapterPattern/MallardDuck.cs index 24c1ede..b0602cf 100644 --- a/AdapterPattern/MallardDuck.cs +++ b/AdapterPattern/MallardDuck.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AdapterPattern { diff --git a/AdapterPattern/Program.cs b/AdapterPattern/Program.cs index e0095ad..cb46974 100644 --- a/AdapterPattern/Program.cs +++ b/AdapterPattern/Program.cs @@ -1,5 +1,4 @@ -using System; - + namespace AdapterPattern { internal static class Program diff --git a/AdapterPattern/TurkeyAdapter.cs b/AdapterPattern/TurkeyAdapter.cs index 708eae1..adf13e0 100644 --- a/AdapterPattern/TurkeyAdapter.cs +++ b/AdapterPattern/TurkeyAdapter.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; namespace AdapterPattern { diff --git a/AdapterPattern/WildTurkey.cs b/AdapterPattern/WildTurkey.cs index 2e79fa7..b6e04ac 100644 --- a/AdapterPattern/WildTurkey.cs +++ b/AdapterPattern/WildTurkey.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AdapterPattern { diff --git a/BridgePattern/FlyingEnchantment.cs b/BridgePattern/FlyingEnchantment.cs index 4678965..4aa5b38 100644 --- a/BridgePattern/FlyingEnchantment.cs +++ b/BridgePattern/FlyingEnchantment.cs @@ -2,7 +2,7 @@ namespace BridgePattern { - public class FlyingEnchantment:IEnchantment + public class FlyingEnchantment : IEnchantment { public void OnActivate() { diff --git a/BridgePattern/Hammer.cs b/BridgePattern/Hammer.cs index 99a2786..55e6782 100644 --- a/BridgePattern/Hammer.cs +++ b/BridgePattern/Hammer.cs @@ -2,7 +2,7 @@ namespace BridgePattern { - public class Hammer:IWeapon + public class Hammer : IWeapon { private readonly IEnchantment _enchantment; public Hammer(IEnchantment enchantment) diff --git a/BridgePattern/Program.cs b/BridgePattern/Program.cs index 2ee4591..c07d035 100644 --- a/BridgePattern/Program.cs +++ b/BridgePattern/Program.cs @@ -8,7 +8,7 @@ private static void Main() sword.Wield(); sword.Swing(); sword.Unwield(); - + IWeapon hammer = new Hammer(new SoulEatingEnchantment()); hammer.Wield(); hammer.Swing(); diff --git a/BridgePattern/SoulEatingEnchantment.cs b/BridgePattern/SoulEatingEnchantment.cs index 6b8d36d..dfb9b8a 100644 --- a/BridgePattern/SoulEatingEnchantment.cs +++ b/BridgePattern/SoulEatingEnchantment.cs @@ -2,7 +2,7 @@ namespace BridgePattern { - public class SoulEatingEnchantment:IEnchantment + public class SoulEatingEnchantment : IEnchantment { public void OnActivate() { diff --git a/BridgePattern/Sword.cs b/BridgePattern/Sword.cs index 2145b4b..23198d5 100644 --- a/BridgePattern/Sword.cs +++ b/BridgePattern/Sword.cs @@ -2,7 +2,7 @@ namespace BridgePattern { - public class Sword:IWeapon + public class Sword : IWeapon { private readonly IEnchantment _enchantment; diff --git a/BuilderPattern/Cook.cs b/BuilderPattern/Cook.cs index dd40620..980bb3d 100644 --- a/BuilderPattern/Cook.cs +++ b/BuilderPattern/Cook.cs @@ -1,24 +1,30 @@ -namespace BuilderPattern { +namespace BuilderPattern +{ // This class can also be called the Director - public class Cook { + public class Cook + { private IBuilder _builder; - public Cook(IBuilder builder) { + public Cook(IBuilder builder) + { AcceptBuilder(builder); } - public void ChangeBuilder(IBuilder builder) { + public void ChangeBuilder(IBuilder builder) + { AcceptBuilder(builder); } - public Hamburger Build() { + public Hamburger Build() + { _builder.AddIngredients(); _builder.AddShape(); _builder.AddSize(); return _builder.Build(); } - private void AcceptBuilder(IBuilder builder) { + private void AcceptBuilder(IBuilder builder) + { _builder = builder; _builder.Reset(); } diff --git a/BuilderPattern/Hamburger.cs b/BuilderPattern/Hamburger.cs index 604f138..68ec0f6 100644 --- a/BuilderPattern/Hamburger.cs +++ b/BuilderPattern/Hamburger.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; - + namespace BuilderPattern { public class Hamburger @@ -9,8 +8,9 @@ public class Hamburger public string[] Ingredients { get; set; } public override string ToString() { - var hamburger=""; - foreach (var ingredient in Ingredients) { + var hamburger = ""; + foreach (var ingredient in Ingredients) + { hamburger += $"{ingredient} "; } return $"Ingredients: {hamburger}, Size: {Size}, Shape: {Shape}"; diff --git a/BuilderPattern/IBuilder.cs b/BuilderPattern/IBuilder.cs index 34d96a2..2730841 100644 --- a/BuilderPattern/IBuilder.cs +++ b/BuilderPattern/IBuilder.cs @@ -1,5 +1,7 @@ -namespace BuilderPattern { - public interface IBuilder { +namespace BuilderPattern +{ + public interface IBuilder + { void AddIngredients(); void AddShape(); void AddSize(); diff --git a/BuilderPattern/MyHamburgerBuilder.cs b/BuilderPattern/MyHamburgerBuilder.cs index 61782f7..4ce1cbf 100644 --- a/BuilderPattern/MyHamburgerBuilder.cs +++ b/BuilderPattern/MyHamburgerBuilder.cs @@ -1,23 +1,29 @@ namespace BuilderPattern { - public class MyHamburgerBuilder : IBuilder { + public class MyHamburgerBuilder : IBuilder + { private Hamburger _hamburger; - public void AddIngredients() { + public void AddIngredients() + { _hamburger.Ingredients = new string[] { "Bread", "Meat", "Tomato", "Salad", "Mayonnaise" }; } - public void AddShape() { + public void AddShape() + { _hamburger.Shape = "Kite"; } - public void AddSize() { + public void AddSize() + { _hamburger.Size = 10; //inches } - public void Reset() { + public void Reset() + { _hamburger = new Hamburger(); } - public Hamburger Build() { + public Hamburger Build() + { return _hamburger; } diff --git a/BuilderPattern/WifesHamburgerBuilder.cs b/BuilderPattern/WifesHamburgerBuilder.cs index 9724fc6..887dcc1 100644 --- a/BuilderPattern/WifesHamburgerBuilder.cs +++ b/BuilderPattern/WifesHamburgerBuilder.cs @@ -1,25 +1,30 @@ -using System; +namespace BuilderPattern +{ -namespace BuilderPattern { - - public class WifesHamburgerBuilder : IBuilder { + public class WifesHamburgerBuilder : IBuilder + { private Hamburger _hamburger; - public void AddIngredients() { + public void AddIngredients() + { _hamburger.Ingredients = new string[] { "Bread", "Salad" }; } - public void AddShape() { + public void AddShape() + { _hamburger.Shape = "Cuboid"; } - public void AddSize() { + public void AddSize() + { _hamburger.Size = 6; //inches } - public void Reset() { + public void Reset() + { _hamburger = new Hamburger(); } - public Hamburger Build() { + public Hamburger Build() + { return _hamburger; } } diff --git a/CommandPattern/Program.cs b/CommandPattern/Program.cs index d12a569..d719ca9 100644 --- a/CommandPattern/Program.cs +++ b/CommandPattern/Program.cs @@ -33,11 +33,11 @@ private static void Main() Console.WriteLine(); var light = new Light("Hall"); - ICommand[] partyOn = {new LightOffCommand(light), bikeDoorOpen, carDoorOpen}; - ICommand[] partyOff = {new LightOnCommand(light), bikeDoorClose, carDoorClose}; + ICommand[] partyOn = { new LightOffCommand(light), bikeDoorOpen, carDoorOpen }; + ICommand[] partyOff = { new LightOnCommand(light), bikeDoorClose, carDoorClose }; - remote[2] = new OnOffStruct {On = new MacroCommand(partyOn), Off = new MacroCommand(partyOff)}; + remote[2] = new OnOffStruct { On = new MacroCommand(partyOn), Off = new MacroCommand(partyOff) }; try { diff --git a/CompositePattern/Menu.cs b/CompositePattern/Menu.cs index 5049303..6be36c6 100644 --- a/CompositePattern/Menu.cs +++ b/CompositePattern/Menu.cs @@ -26,7 +26,7 @@ public override void Remove(MenuComponent component) public override MenuComponent GetChild(int i) { - return _components[i]; + return _components[i]; } public override string Name { get; } diff --git a/CompositePattern/MenuComponent.cs b/CompositePattern/MenuComponent.cs index 07c8c03..38928e4 100644 --- a/CompositePattern/MenuComponent.cs +++ b/CompositePattern/MenuComponent.cs @@ -6,7 +6,7 @@ public class MenuComponent { public virtual void Add(MenuComponent component) { - throw new NotImplementedException(); + throw new NotImplementedException(); } public virtual void Remove(MenuComponent component) diff --git a/CompositePattern/MenuItem.cs b/CompositePattern/MenuItem.cs index 50222e8..ab7c2f1 100644 --- a/CompositePattern/MenuItem.cs +++ b/CompositePattern/MenuItem.cs @@ -18,7 +18,7 @@ public MenuItem(string name, string description, double price, bool isveg) public override double Price { get; } - public override bool Vegetarian { get; } + public override bool Vegetarian { get; } public override void Print() { diff --git a/CompositePattern/Program.cs b/CompositePattern/Program.cs index ea24810..1c24613 100644 --- a/CompositePattern/Program.cs +++ b/CompositePattern/Program.cs @@ -7,14 +7,14 @@ public static void Main() var breakfast = new Menu("Breakfast", "Pancake House"); var lunch = new Menu("Lunch", "Deli Diner"); - var dinner = new Menu("Dinner","Dinneroni"); + var dinner = new Menu("Dinner", "Dinneroni"); var dessert = new Menu("Dessert", "Ice Cream"); var menu = new Menu("All", "McDonalds"); - breakfast.Add(new MenuItem("Waffles","Butterscotch waffles",140,false)); - breakfast.Add(new MenuItem("Corn Flakes","Kellogs",80,true)); + breakfast.Add(new MenuItem("Waffles", "Butterscotch waffles", 140, false)); + breakfast.Add(new MenuItem("Corn Flakes", "Kellogs", 80, true)); lunch.Add(new MenuItem("Burger", "Cheese and Onion Burger", 250, true)); lunch.Add(new MenuItem("Sandwich", "Chicken Sandwich", 280, false)); @@ -23,7 +23,7 @@ public static void Main() dinner.Add(new MenuItem("Pasta", "Chicken Pasta", 280, false)); dessert.Add(new MenuItem("Ice Cream", "Vanilla and Chocolate", 120, true)); - dessert.Add(new MenuItem("Cake", "Choclate Cake Slice",180, false)); + dessert.Add(new MenuItem("Cake", "Choclate Cake Slice", 180, false)); dinner.Add(dessert); menu.Add(breakfast); diff --git a/DecoratorPattern/MochaCondiment.cs b/DecoratorPattern/MochaCondiment.cs index ae2b45d..b0e76a5 100644 --- a/DecoratorPattern/MochaCondiment.cs +++ b/DecoratorPattern/MochaCondiment.cs @@ -9,8 +9,9 @@ public MochaCondiment(Beverage beverage) this._beverage = beverage; } - public override string Description { - get + public override string Description + { + get { if (_beverage.Description.StartsWith("Mocha")) { diff --git a/DecoratorPattern/WhipCondiment.cs b/DecoratorPattern/WhipCondiment.cs index 8863b67..550b929 100644 --- a/DecoratorPattern/WhipCondiment.cs +++ b/DecoratorPattern/WhipCondiment.cs @@ -12,7 +12,7 @@ public WhipCondiment(Beverage beverage) public override string Description { get - { + { if (_beverage.Description.StartsWith("Whip")) { return "Double " + _beverage.Description; diff --git a/FacadePattern/Dimmer.cs b/FacadePattern/Dimmer.cs index d9cfef3..11c35df 100644 --- a/FacadePattern/Dimmer.cs +++ b/FacadePattern/Dimmer.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace FacadePattern { diff --git a/FacadePattern/DvdPlayer.cs b/FacadePattern/DvdPlayer.cs index ffaa58c..f442655 100644 --- a/FacadePattern/DvdPlayer.cs +++ b/FacadePattern/DvdPlayer.cs @@ -12,14 +12,14 @@ public void Insert(Dvd dvd) { _dvd = dvd; Console.WriteLine($"Inserting {dvd.Movie}"); - + } public void Play() => Console.WriteLine($"Playing {_dvd.Movie}"); public void Pause() { - Console.WriteLine($"Pausing at {_time = (new Random()).Next(_time,_time + 120)}"); + Console.WriteLine($"Pausing at {_time = (new Random()).Next(_time, _time + 120)}"); } public void Resume() diff --git a/FacadePattern/HometheaterFacade.cs b/FacadePattern/HometheaterFacade.cs index 2d09049..703828e 100644 --- a/FacadePattern/HometheaterFacade.cs +++ b/FacadePattern/HometheaterFacade.cs @@ -5,8 +5,8 @@ public class HomeTheatreFacade private Dimmer _dimmer; private Dvd _dvd; private DvdPlayer _dvdPlayer; - - public HomeTheatreFacade(Dimmer dimmer,Dvd dvd, DvdPlayer dvdPlayer) + + public HomeTheatreFacade(Dimmer dimmer, Dvd dvd, DvdPlayer dvdPlayer) { _dvd = dvd; _dimmer = dimmer; diff --git a/FacadePattern/Program.cs b/FacadePattern/Program.cs index a695029..074539c 100644 --- a/FacadePattern/Program.cs +++ b/FacadePattern/Program.cs @@ -9,7 +9,7 @@ private static void Main() var dimmer = new Dimmer(); var dvdPlayer = new DvdPlayer(); var dvd = new Dvd("Gone with the Wind 2 : Electric Bugaloo"); - var homeTheater = new HomeTheatreFacade(dimmer,dvd,dvdPlayer); + var homeTheater = new HomeTheatreFacade(dimmer, dvd, dvdPlayer); homeTheater.WatchMovie(); Console.WriteLine(); diff --git a/FactoryPattern/Factory Method/ChicagoPizzaFactory.cs b/FactoryPattern/Factory Method/ChicagoPizzaFactory.cs index 63df3a3..2075587 100644 --- a/FactoryPattern/Factory Method/ChicagoPizzaFactory.cs +++ b/FactoryPattern/Factory Method/ChicagoPizzaFactory.cs @@ -6,7 +6,7 @@ protected override Pizza Create(string type) { Pizza pizza; IIngredientsFactory ingredients = new ChicagoIngredientsFactory(); - + if (type.Equals("Cheese")) { pizza = new CheesePizza(ingredients); diff --git a/FactoryPattern/Factory Method/NYPizzaFactory.cs b/FactoryPattern/Factory Method/NYPizzaFactory.cs index d1a2776..2c24bff 100644 --- a/FactoryPattern/Factory Method/NYPizzaFactory.cs +++ b/FactoryPattern/Factory Method/NYPizzaFactory.cs @@ -9,15 +9,15 @@ protected override Pizza Create(string type) if (type.Equals("Cheese")) { - pizza = new CheesePizza(ingredients) {Name = "NY Style Cheese"}; + pizza = new CheesePizza(ingredients) { Name = "NY Style Cheese" }; } else if (type.Equals("Clam")) { - pizza = new ClamPizza(ingredients) {Name = "NY Style Clam"}; + pizza = new ClamPizza(ingredients) { Name = "NY Style Clam" }; } else { - pizza = new VeggiePizza(ingredients) {Name = "NY Style Veggie"}; + pizza = new VeggiePizza(ingredients) { Name = "NY Style Veggie" }; } pizza.Color = "blue"; return pizza; diff --git a/FactoryPattern/Pizza/CheesePizza.cs b/FactoryPattern/Pizza/CheesePizza.cs index 60dac3c..c7e26b5 100644 --- a/FactoryPattern/Pizza/CheesePizza.cs +++ b/FactoryPattern/Pizza/CheesePizza.cs @@ -12,7 +12,7 @@ public CheesePizza(IIngredientsFactory ing) } internal override void Prepare() { - Console.WriteLine("Preparing " + Name + " Using"); + Console.WriteLine("Preparing " + Name + " Using"); Console.Write("Dough: " + _ingredients.CreateDough().Name + ", Cheese: " + _ingredients.CreateCheese().Name + ", Sauce: " + _ingredients.CreateSauce().Name + ", Veggies: "); Console.WriteLine(); foreach (var val in _ingredients.CreateVeggies()) diff --git a/FlyweightPattern/BubbleMilkTea.cs b/FlyweightPattern/BubbleMilkTea.cs index 476cd3e..c58ab9b 100644 --- a/FlyweightPattern/BubbleMilkTea.cs +++ b/FlyweightPattern/BubbleMilkTea.cs @@ -2,7 +2,7 @@ namespace FlyweightPattern { - public class BubbleMilkTea: IBeverage + public class BubbleMilkTea : IBeverage { public BubbleMilkTea() { diff --git a/FlyweightPattern/BubbleTeaShop.cs b/FlyweightPattern/BubbleTeaShop.cs index 4b30646..e6bcbae 100644 --- a/FlyweightPattern/BubbleTeaShop.cs +++ b/FlyweightPattern/BubbleTeaShop.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Reflection.Metadata.Ecma335; namespace FlyweightPattern { @@ -17,7 +16,7 @@ public BubbleTeaShop() private void TakeOrders() { var factory = new BeverageFlyweightFactory(); - + takeAwayOrders.Add(factory.MakeBeverage(BeverageType.BubbleMilk)); takeAwayOrders.Add(factory.MakeBeverage(BeverageType.BubbleMilk)); takeAwayOrders.Add(factory.MakeBeverage(BeverageType.CoconutMilk)); diff --git a/FlyweightPattern/CoconutMilkTea.cs b/FlyweightPattern/CoconutMilkTea.cs index b5c89b2..f96035b 100644 --- a/FlyweightPattern/CoconutMilkTea.cs +++ b/FlyweightPattern/CoconutMilkTea.cs @@ -2,13 +2,13 @@ namespace FlyweightPattern { - public class CoconutMilkTea: IBeverage + public class CoconutMilkTea : IBeverage { public CoconutMilkTea() { Console.WriteLine("Initializing a Coconut Milk Tea instance"); } - + public void Drink() { Console.WriteLine("hmmm... this is coconut milk tea"); diff --git a/FlyweightPattern/FoamMilkTea.cs b/FlyweightPattern/FoamMilkTea.cs index eb5c31a..958b9d7 100644 --- a/FlyweightPattern/FoamMilkTea.cs +++ b/FlyweightPattern/FoamMilkTea.cs @@ -2,14 +2,14 @@ namespace FlyweightPattern { - public class FoamMilkTea:IBeverage + public class FoamMilkTea : IBeverage { - + public FoamMilkTea() { Console.WriteLine("Initializing a Foam Milk Tea instance"); } - + public void Drink() { Console.WriteLine("hmmm... this is foam milk tea"); diff --git a/FlyweightPattern/OolingMilkTea.cs b/FlyweightPattern/OolingMilkTea.cs index 432be67..40a3715 100644 --- a/FlyweightPattern/OolingMilkTea.cs +++ b/FlyweightPattern/OolingMilkTea.cs @@ -2,7 +2,7 @@ namespace FlyweightPattern { - public class OolingMilkTea: IBeverage + public class OolingMilkTea : IBeverage { public OolingMilkTea() diff --git a/FlyweightPattern/Program.cs b/FlyweightPattern/Program.cs index 91d6ab2..462bab7 100644 --- a/FlyweightPattern/Program.cs +++ b/FlyweightPattern/Program.cs @@ -1,6 +1,4 @@ -using System; - -namespace FlyweightPattern +namespace FlyweightPattern { static class Program { diff --git a/FlyweightPattern/ProxyPattern/Dimmer.cs b/FlyweightPattern/ProxyPattern/Dimmer.cs index d9cfef3..11c35df 100644 --- a/FlyweightPattern/ProxyPattern/Dimmer.cs +++ b/FlyweightPattern/ProxyPattern/Dimmer.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace FacadePattern { diff --git a/FlyweightPattern/ProxyPattern/DvdPlayer.cs b/FlyweightPattern/ProxyPattern/DvdPlayer.cs index ffaa58c..f442655 100644 --- a/FlyweightPattern/ProxyPattern/DvdPlayer.cs +++ b/FlyweightPattern/ProxyPattern/DvdPlayer.cs @@ -12,14 +12,14 @@ public void Insert(Dvd dvd) { _dvd = dvd; Console.WriteLine($"Inserting {dvd.Movie}"); - + } public void Play() => Console.WriteLine($"Playing {_dvd.Movie}"); public void Pause() { - Console.WriteLine($"Pausing at {_time = (new Random()).Next(_time,_time + 120)}"); + Console.WriteLine($"Pausing at {_time = (new Random()).Next(_time, _time + 120)}"); } public void Resume() diff --git a/FlyweightPattern/ProxyPattern/HometheaterFacade.cs b/FlyweightPattern/ProxyPattern/HometheaterFacade.cs index 2d09049..703828e 100644 --- a/FlyweightPattern/ProxyPattern/HometheaterFacade.cs +++ b/FlyweightPattern/ProxyPattern/HometheaterFacade.cs @@ -5,8 +5,8 @@ public class HomeTheatreFacade private Dimmer _dimmer; private Dvd _dvd; private DvdPlayer _dvdPlayer; - - public HomeTheatreFacade(Dimmer dimmer,Dvd dvd, DvdPlayer dvdPlayer) + + public HomeTheatreFacade(Dimmer dimmer, Dvd dvd, DvdPlayer dvdPlayer) { _dvd = dvd; _dimmer = dimmer; diff --git a/FlyweightPattern/ProxyPattern/Program.cs b/FlyweightPattern/ProxyPattern/Program.cs index a695029..074539c 100644 --- a/FlyweightPattern/ProxyPattern/Program.cs +++ b/FlyweightPattern/ProxyPattern/Program.cs @@ -9,7 +9,7 @@ private static void Main() var dimmer = new Dimmer(); var dvdPlayer = new DvdPlayer(); var dvd = new Dvd("Gone with the Wind 2 : Electric Bugaloo"); - var homeTheater = new HomeTheatreFacade(dimmer,dvd,dvdPlayer); + var homeTheater = new HomeTheatreFacade(dimmer, dvd, dvdPlayer); homeTheater.WatchMovie(); Console.WriteLine(); diff --git a/IteratorPattern/BreakfastMenu.cs b/IteratorPattern/BreakfastMenu.cs index c9ad3d8..f4b5073 100644 --- a/IteratorPattern/BreakfastMenu.cs +++ b/IteratorPattern/BreakfastMenu.cs @@ -20,16 +20,16 @@ public BreakfastMenu() AddItem("Waffle", "Blueberry Sauce topped breakfast Waffles", 125, false); AddItem("Sandwich", "Veggie Sandwich with tomato and cucumber", 75, true); - AddItem("Pankcakes", "Maple syrup Pancakes",110,false); - AddItem("Corn Flakes", "Cornflakes with fruits and nuts",60,true); + AddItem("Pankcakes", "Maple syrup Pancakes", 110, false); + AddItem("Corn Flakes", "Cornflakes with fruits and nuts", 60, true); } private void AddItem(string name, string description, int price, bool veg) { - var item = new Menu(name,description,price,veg); + var item = new Menu(name, description, price, veg); _items.Add(item); } - + } } \ No newline at end of file diff --git a/IteratorPattern/BreakfastMenuEnum.cs b/IteratorPattern/BreakfastMenuEnum.cs index d661b02..683cd3c 100644 --- a/IteratorPattern/BreakfastMenuEnum.cs +++ b/IteratorPattern/BreakfastMenuEnum.cs @@ -37,7 +37,7 @@ public Menu Current { try { - return (Menu) _items[_position]; + return (Menu)_items[_position]; } catch (IndexOutOfRangeException) { diff --git a/IteratorPattern/BreakfastMenuIterator.cs b/IteratorPattern/BreakfastMenuIterator.cs index 9c25928..68bd86e 100644 --- a/IteratorPattern/BreakfastMenuIterator.cs +++ b/IteratorPattern/BreakfastMenuIterator.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections; -using System.Collections.Generic; +using System.Collections; namespace IteratorPattern { diff --git a/IteratorPattern/Client.cs b/IteratorPattern/Client.cs index 21f2db8..27a1a5b 100644 --- a/IteratorPattern/Client.cs +++ b/IteratorPattern/Client.cs @@ -26,7 +26,7 @@ private void PrintMenu(IEnumerable iter) { foreach (var item in iter) { - var i = (Menu) item; + var i = (Menu)item; Console.WriteLine($"{i.Name} Rs. {i.Price} { (i.Vegetarian ? "*" : "x") } \n {i.Description} "); } diff --git a/IteratorPattern/DinnerMenu.cs b/IteratorPattern/DinnerMenu.cs index cd0c7a6..877fcc7 100644 --- a/IteratorPattern/DinnerMenu.cs +++ b/IteratorPattern/DinnerMenu.cs @@ -28,7 +28,7 @@ public DinnerMenu() private void AddItems(string name, string description, int price, bool veg) { - var item = new Menu(name,description,price,veg); + var item = new Menu(name, description, price, veg); if (_count <= Max) { diff --git a/IteratorPattern/DinnerMenuEnum.cs b/IteratorPattern/DinnerMenuEnum.cs index a567833..68929eb 100644 --- a/IteratorPattern/DinnerMenuEnum.cs +++ b/IteratorPattern/DinnerMenuEnum.cs @@ -1,6 +1,5 @@ using System; using System.Collections; -using System.Collections.Generic; namespace IteratorPattern { diff --git a/IteratorPattern/DinnerMenuIterator.cs b/IteratorPattern/DinnerMenuIterator.cs index a5fd659..c4dca48 100644 --- a/IteratorPattern/DinnerMenuIterator.cs +++ b/IteratorPattern/DinnerMenuIterator.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Collections.Generic; namespace IteratorPattern { diff --git a/IteratorPattern/Menu.cs b/IteratorPattern/Menu.cs index 355ed4d..984f85f 100644 --- a/IteratorPattern/Menu.cs +++ b/IteratorPattern/Menu.cs @@ -14,6 +14,6 @@ public Menu(string name, string description, double price, bool vegetarian) Price = price; Vegetarian = vegetarian; } - + } } \ No newline at end of file diff --git a/IteratorPattern/Program.cs b/IteratorPattern/Program.cs index 6f5712d..dae6a70 100644 --- a/IteratorPattern/Program.cs +++ b/IteratorPattern/Program.cs @@ -6,8 +6,8 @@ private static void Main() { var breakfast = new BreakfastMenu(); var dinner = new DinnerMenu(); - var waiter = new Client(breakfast,dinner); + var waiter = new Client(breakfast, dinner); waiter.PrintMenu(); } - } + } } diff --git a/MediatorPattern/Customer.cs b/MediatorPattern/Customer.cs index 774863c..b3bf289 100644 --- a/MediatorPattern/Customer.cs +++ b/MediatorPattern/Customer.cs @@ -4,7 +4,7 @@ namespace MediatorPattern { class Customer : Colleague { - public Customer(Mediator mediator) : base(mediator) {} + public Customer(Mediator mediator) : base(mediator) { } public override void Notify(string message) { diff --git a/MediatorPattern/Program.cs b/MediatorPattern/Program.cs index 9276771..bbdddc5 100644 --- a/MediatorPattern/Program.cs +++ b/MediatorPattern/Program.cs @@ -1,6 +1,4 @@ -using System; - -namespace MediatorPattern +namespace MediatorPattern { class Program { diff --git a/MediatorPattern/Programmer.cs b/MediatorPattern/Programmer.cs index 275214e..cef0b16 100644 --- a/MediatorPattern/Programmer.cs +++ b/MediatorPattern/Programmer.cs @@ -4,7 +4,7 @@ namespace MediatorPattern { class Programmer : Colleague { - public Programmer(Mediator mediator) : base(mediator) {} + public Programmer(Mediator mediator) : base(mediator) { } public override void Notify(string message) { diff --git a/MediatorPattern/Tester.cs b/MediatorPattern/Tester.cs index e218496..0fe71d7 100644 --- a/MediatorPattern/Tester.cs +++ b/MediatorPattern/Tester.cs @@ -4,7 +4,7 @@ namespace MediatorPattern { class Tester : Colleague { - public Tester(Mediator mediator) : base(mediator) {} + public Tester(Mediator mediator) : base(mediator) { } public override void Notify(string message) { diff --git a/ObserverPattern/WeatherMonitor.cs b/ObserverPattern/WeatherMonitor.cs index 5cf8942..6d65f37 100644 --- a/ObserverPattern/WeatherMonitor.cs +++ b/ObserverPattern/WeatherMonitor.cs @@ -21,7 +21,7 @@ public WeatherMonitor(string name) { _name = name; } - + public void OnCompleted() { throw new NotImplementedException(); @@ -39,7 +39,7 @@ public void OnNext(Weather value) { string op = $"| Temperature : {value.Temperature} Celsius |"; Console.Write(op); - + } if (_name.Contains("P")) { @@ -48,7 +48,7 @@ public void OnNext(Weather value) } if (_name.Contains("H")) { - string op = $"| Humidity : {value.Humidity*100} % |"; + string op = $"| Humidity : {value.Humidity * 100} % |"; Console.Write(op); } if (!(_name.Contains("T") || _name.Contains("P") || _name.Contains("H"))) diff --git a/ProxyPattern/Image.cs b/ProxyPattern/Image.cs index 9c1d7b0..5041b84 100644 --- a/ProxyPattern/Image.cs +++ b/ProxyPattern/Image.cs @@ -3,6 +3,6 @@ public interface Image { void display(); - + } } diff --git a/ProxyPattern/RealImage.cs b/ProxyPattern/RealImage.cs index 0405fad..d0826fd 100644 --- a/ProxyPattern/RealImage.cs +++ b/ProxyPattern/RealImage.cs @@ -6,22 +6,22 @@ namespace ProxyPattern public class RealImage : Image { - private string _fileName; + private string _fileName; - public RealImage(string fileName) - { - _fileName = fileName; - loadFromDisk(_fileName); - } + public RealImage(string fileName) + { + _fileName = fileName; + loadFromDisk(_fileName); + } - public void display() - { - Console.WriteLine("Displaying " + _fileName); - } + public void display() + { + Console.WriteLine("Displaying " + _fileName); + } - private void loadFromDisk(string fileName) - { + private void loadFromDisk(string fileName) + { Console.WriteLine("Loading " + fileName); + } } -} } \ No newline at end of file diff --git a/SingletonPattern/ChocolateBoiler.cs b/SingletonPattern/ChocolateBoiler.cs index 35d3e15..bdc6a2d 100644 --- a/SingletonPattern/ChocolateBoiler.cs +++ b/SingletonPattern/ChocolateBoiler.cs @@ -5,9 +5,9 @@ namespace SingletonPattern internal partial class ChocolateBoiler { private static readonly Lazy _singleton = new Lazy(() => new ChocolateBoiler()); - + public static ChocolateBoiler GetInstance() => _singleton.Value; - + private Status _boiler; private ChocolateBoiler() diff --git a/SingletonPattern/Program.cs b/SingletonPattern/Program.cs index 0609ca0..7d81245 100644 --- a/SingletonPattern/Program.cs +++ b/SingletonPattern/Program.cs @@ -11,7 +11,7 @@ static void Main() var chocoEggs = ChocolateBoiler.GetInstance(); chocoEggs.Fill(); chocoEggs.Boil(); - chocoEggs.Drain(); + chocoEggs.Drain(); } catch (Exception) { diff --git a/StatePattern/HasQuarterState.cs b/StatePattern/HasQuarterState.cs index f5e4d98..2dc106d 100644 --- a/StatePattern/HasQuarterState.cs +++ b/StatePattern/HasQuarterState.cs @@ -33,7 +33,7 @@ public void TurnCrank() { Machine.State = Machine.SoldState; } - } + } public void Dispense() { diff --git a/StatePattern/NoQuarterState.cs b/StatePattern/NoQuarterState.cs index 5f2d670..978114d 100644 --- a/StatePattern/NoQuarterState.cs +++ b/StatePattern/NoQuarterState.cs @@ -23,7 +23,7 @@ public void EjectQuarter() public void TurnCrank() { - Console.WriteLine("Can't turn crank without a quarter"); + Console.WriteLine("Can't turn crank without a quarter"); } public void Dispense() diff --git a/StatePattern/SoldState.cs b/StatePattern/SoldState.cs index 0c2d4f4..e8ecb33 100644 --- a/StatePattern/SoldState.cs +++ b/StatePattern/SoldState.cs @@ -18,7 +18,7 @@ public void InsertQuarter() public void EjectQuarter() { - Console.WriteLine("Can't eject, already turned the crank"); + Console.WriteLine("Can't eject, already turned the crank"); } public void TurnCrank() diff --git a/StrategyPattern/Program.cs b/StrategyPattern/Program.cs index 85f9495..934724b 100644 --- a/StrategyPattern/Program.cs +++ b/StrategyPattern/Program.cs @@ -6,7 +6,8 @@ internal class Duck private IFlyBehaviour _flyer; - public IQuackBehaviour Quacker { + public IQuackBehaviour Quacker + { set { _quacker = value; @@ -52,7 +53,7 @@ internal static class Program { private static void Main() { - var mallard = new MallardDuck {Quacker = new QuackNormal()}; + var mallard = new MallardDuck { Quacker = new QuackNormal() }; mallard.Display(); mallard.Flyer = new FlyWings(); mallard.Display(); diff --git a/StrategyPattern/QuackNormal.cs b/StrategyPattern/QuackNormal.cs index aaa0b1f..0dc0053 100644 --- a/StrategyPattern/QuackNormal.cs +++ b/StrategyPattern/QuackNormal.cs @@ -7,6 +7,6 @@ class QuackNormal : IQuackBehaviour public void Quack() { Console.WriteLine("Quack Quack"); - } + } } } diff --git a/TemplatePattern/Program.cs b/TemplatePattern/Program.cs index cc0c9b3..eb0abae 100644 --- a/TemplatePattern/Program.cs +++ b/TemplatePattern/Program.cs @@ -13,7 +13,7 @@ static void Main() tea.WantsCondiments = true; tea.AddSugar = 5; tea.Prepare(); - + Console.WriteLine(); coffee.WantsCondiments = true; coffee.Prepare(); diff --git a/VisitorPattern/Apartment.cs b/VisitorPattern/Apartment.cs index bbf18df..63469c7 100644 --- a/VisitorPattern/Apartment.cs +++ b/VisitorPattern/Apartment.cs @@ -1,6 +1,6 @@ namespace VisitorPattern { - public class Apartment: Unit + public class Apartment : Unit { public Apartment(params Unit[] units) : base(units) { diff --git a/VisitorPattern/ApartmentVisitor.cs b/VisitorPattern/ApartmentVisitor.cs index 21e3d63..bdc6b81 100644 --- a/VisitorPattern/ApartmentVisitor.cs +++ b/VisitorPattern/ApartmentVisitor.cs @@ -2,7 +2,7 @@ namespace VisitorPattern { - public class ApartmentVisitor: IUnitVisitor + public class ApartmentVisitor : IUnitVisitor { public void VisitApartment(Apartment apartment) { diff --git a/VisitorPattern/Bedroom.cs b/VisitorPattern/Bedroom.cs index 3836d32..ee0d08e 100644 --- a/VisitorPattern/Bedroom.cs +++ b/VisitorPattern/Bedroom.cs @@ -1,6 +1,6 @@ namespace VisitorPattern { - public class Bedroom: Unit + public class Bedroom : Unit { public Bedroom(params Unit[] units) : base(units) { diff --git a/VisitorPattern/BedroomVisitor.cs b/VisitorPattern/BedroomVisitor.cs index 47cfa57..f4792ea 100644 --- a/VisitorPattern/BedroomVisitor.cs +++ b/VisitorPattern/BedroomVisitor.cs @@ -2,7 +2,7 @@ namespace VisitorPattern { - public class BedroomVisitor: IUnitVisitor + public class BedroomVisitor : IUnitVisitor { public void VisitApartment(Apartment apartment) { diff --git a/VisitorPattern/LivingRoom.cs b/VisitorPattern/LivingRoom.cs index 54699d3..31e7421 100644 --- a/VisitorPattern/LivingRoom.cs +++ b/VisitorPattern/LivingRoom.cs @@ -1,6 +1,6 @@ namespace VisitorPattern { - public class LivingRoom: Unit + public class LivingRoom : Unit { public LivingRoom(params Unit[] units) : base(units) { diff --git a/VisitorPattern/LivingRoomVisitor.cs b/VisitorPattern/LivingRoomVisitor.cs index a45ebb4..f6cf11a 100644 --- a/VisitorPattern/LivingRoomVisitor.cs +++ b/VisitorPattern/LivingRoomVisitor.cs @@ -2,7 +2,7 @@ namespace VisitorPattern { - public class LivingRoomVisitor: IUnitVisitor + public class LivingRoomVisitor : IUnitVisitor { public void VisitApartment(Apartment apartment) { diff --git a/VisitorPattern/Program.cs b/VisitorPattern/Program.cs index f328752..3d17f4d 100644 --- a/VisitorPattern/Program.cs +++ b/VisitorPattern/Program.cs @@ -12,7 +12,7 @@ static void Main() apartment.Accept(new ApartmentVisitor()); apartment.Accept(new LivingRoomVisitor()); apartment.Accept(new BedroomVisitor()); - + Console.WriteLine("Visiting a Studio"); studio.Accept(new StudioVisitor()); studio.Accept(new LivingRoomVisitor()); diff --git a/VisitorPattern/Studio.cs b/VisitorPattern/Studio.cs index 8bdc7d3..aa48f4e 100644 --- a/VisitorPattern/Studio.cs +++ b/VisitorPattern/Studio.cs @@ -1,6 +1,6 @@ namespace VisitorPattern { - public class Studio: Unit + public class Studio : Unit { public Studio(params Unit[] units) : base(units) { diff --git a/VisitorPattern/StudioVisitor.cs b/VisitorPattern/StudioVisitor.cs index 646af15..82c2521 100644 --- a/VisitorPattern/StudioVisitor.cs +++ b/VisitorPattern/StudioVisitor.cs @@ -2,7 +2,7 @@ namespace VisitorPattern { - public class StudioVisitor: IUnitVisitor + public class StudioVisitor : IUnitVisitor { public void VisitApartment(Apartment apartment) { From 871bea0de8cc4e339671a8fca7f715ddf7d6ff06 Mon Sep 17 00:00:00 2001 From: u8989332 Date: Sat, 6 Mar 2021 11:52:57 +0800 Subject: [PATCH 08/16] Fix the link of Proxy Pattern in README.md (#20) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 238a5db..0d2dbdd 100644 --- a/README.md +++ b/README.md @@ -32,4 +32,4 @@ There are three kinds of Design Patterns * [Template](/TemplatePattern) * [Visitor](/VisitorPattern) * [Mediator](/MediatorPattern) -* [Proxy] (/ProxyPattern) \ No newline at end of file +* [Proxy](/ProxyPattern) From 6f9a5c906267e267156e99055a75dd28cd96ea61 Mon Sep 17 00:00:00 2001 From: Kyle <59298462+Kfollen93@users.noreply.github.com> Date: Tue, 27 Jul 2021 10:16:05 -0700 Subject: [PATCH 09/16] Fix typos in README (#23) --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0d2dbdd..d16ff9f 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -# DesignPatterns -Design patterns are solutions to recurring problems; guidelines on how to tackle certain problems +# Design Patterns +Design patterns are solutions to recurring problems; guidelines on how to tackle certain problems. I have included implementations of some design patterns in C# to help beginners like me get their feet wet. -There are better alternatives available for some of them in the .NET Framework, so this is by no means a comprehensive tutorial +There are better alternatives available for some of them in the .NET Framework, so this is by no means a comprehensive tutorial. -Any comments and suggestions are welcome. If you want to add a new design pattern implementation, just follow the naming conversation, fork my repo and submit a pull request. Same goes for any improvements and modifications. +Any comments and suggestions are welcome. If you want to add a new design pattern implementation, just follow the naming convention, fork my repo and submit a pull request. Same goes for any improvements and modifications. ## Types of Design Patterns --------------------------- -There are three kinds of Design Patterns +There are three kinds of Design Patterns: * Creational * Structural From 04526887f577f21e212e963fa383b51971e8d197 Mon Sep 17 00:00:00 2001 From: Can Karaboran Date: Wed, 22 Sep 2021 12:01:03 +0300 Subject: [PATCH 10/16] Fix interface directory (#25) Co-authored-by: Can Karaboran --- .../Ingredients/{Intefaces => Interfaces}/ICheese.cs | 0 .../Ingredients/{Intefaces => Interfaces}/IClam.cs | 0 .../Ingredients/{Intefaces => Interfaces}/IDough.cs | 0 .../Ingredients/{Intefaces => Interfaces}/ISauce.cs | 0 .../Ingredients/{Intefaces => Interfaces}/IVeggies.cs | 0 FactoryPattern/FactoryPattern.csproj | 4 ---- 6 files changed, 4 deletions(-) rename FactoryPattern/Abstract Factory/Ingredients/{Intefaces => Interfaces}/ICheese.cs (100%) rename FactoryPattern/Abstract Factory/Ingredients/{Intefaces => Interfaces}/IClam.cs (100%) rename FactoryPattern/Abstract Factory/Ingredients/{Intefaces => Interfaces}/IDough.cs (100%) rename FactoryPattern/Abstract Factory/Ingredients/{Intefaces => Interfaces}/ISauce.cs (100%) rename FactoryPattern/Abstract Factory/Ingredients/{Intefaces => Interfaces}/IVeggies.cs (100%) diff --git a/FactoryPattern/Abstract Factory/Ingredients/Intefaces/ICheese.cs b/FactoryPattern/Abstract Factory/Ingredients/Interfaces/ICheese.cs similarity index 100% rename from FactoryPattern/Abstract Factory/Ingredients/Intefaces/ICheese.cs rename to FactoryPattern/Abstract Factory/Ingredients/Interfaces/ICheese.cs diff --git a/FactoryPattern/Abstract Factory/Ingredients/Intefaces/IClam.cs b/FactoryPattern/Abstract Factory/Ingredients/Interfaces/IClam.cs similarity index 100% rename from FactoryPattern/Abstract Factory/Ingredients/Intefaces/IClam.cs rename to FactoryPattern/Abstract Factory/Ingredients/Interfaces/IClam.cs diff --git a/FactoryPattern/Abstract Factory/Ingredients/Intefaces/IDough.cs b/FactoryPattern/Abstract Factory/Ingredients/Interfaces/IDough.cs similarity index 100% rename from FactoryPattern/Abstract Factory/Ingredients/Intefaces/IDough.cs rename to FactoryPattern/Abstract Factory/Ingredients/Interfaces/IDough.cs diff --git a/FactoryPattern/Abstract Factory/Ingredients/Intefaces/ISauce.cs b/FactoryPattern/Abstract Factory/Ingredients/Interfaces/ISauce.cs similarity index 100% rename from FactoryPattern/Abstract Factory/Ingredients/Intefaces/ISauce.cs rename to FactoryPattern/Abstract Factory/Ingredients/Interfaces/ISauce.cs diff --git a/FactoryPattern/Abstract Factory/Ingredients/Intefaces/IVeggies.cs b/FactoryPattern/Abstract Factory/Ingredients/Interfaces/IVeggies.cs similarity index 100% rename from FactoryPattern/Abstract Factory/Ingredients/Intefaces/IVeggies.cs rename to FactoryPattern/Abstract Factory/Ingredients/Interfaces/IVeggies.cs diff --git a/FactoryPattern/FactoryPattern.csproj b/FactoryPattern/FactoryPattern.csproj index 8ffe015..23df604 100644 --- a/FactoryPattern/FactoryPattern.csproj +++ b/FactoryPattern/FactoryPattern.csproj @@ -5,8 +5,4 @@ netcoreapp2.1 - - - - From dcd0bebfbaa69973d41a34943f32d657a3f28b8a Mon Sep 17 00:00:00 2001 From: Ashwin Chakravarthy K Date: Fri, 26 Aug 2022 16:04:04 +0530 Subject: [PATCH 11/16] net core to net 6 upgrade (#28) --- AdapterPattern/AdapterPattern.csproj | 4 +++- BridgePattern/BridgePattern.csproj | 10 ++++++---- BuilderPattern/BuilderPattern.csproj | 4 +++- .../ChainOfResponsibilityPattern.csproj | 4 +++- CommandPattern/CommandPattern.csproj | 4 +++- CompositePattern/CompositePattern.csproj | 4 +++- DecoratorPattern/DecoratorPattern.csproj | 4 +++- FacadePattern/FacadePattern.csproj | 4 +++- FactoryPattern/FactoryPattern.csproj | 4 +++- FlyweightPattern/FlyweightPattern.csproj | 10 ++++++---- IteratorPattern/IteratorPattern.csproj | 4 +++- MediatorPattern/MediatorPattern.csproj | 10 ++++++---- ObserverPattern/ObserverPattern.csproj | 4 +++- PrototypePattern/PrototypePattern.csproj | 4 +++- ProxyPattern/ProxyPattern.csproj | 4 +++- SingletonPattern/SingletonPattern.csproj | 4 +++- StatePattern/StatePattern.csproj | 4 +++- StrategyPattern/StrategyPattern.csproj | 4 +++- TemplatePattern/TemplatePattern.csproj | 4 +++- VisitorPattern/VisitorPattern.csproj | 10 ++++++---- 20 files changed, 72 insertions(+), 32 deletions(-) diff --git a/AdapterPattern/AdapterPattern.csproj b/AdapterPattern/AdapterPattern.csproj index ce1697a..74abf5c 100644 --- a/AdapterPattern/AdapterPattern.csproj +++ b/AdapterPattern/AdapterPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/BridgePattern/BridgePattern.csproj b/BridgePattern/BridgePattern.csproj index 51b7f6c..74abf5c 100644 --- a/BridgePattern/BridgePattern.csproj +++ b/BridgePattern/BridgePattern.csproj @@ -1,8 +1,10 @@ - - Exe - netcoreapp2.1 - + + Exe + net6.0 + enable + enable + diff --git a/BuilderPattern/BuilderPattern.csproj b/BuilderPattern/BuilderPattern.csproj index ce1697a..74abf5c 100644 --- a/BuilderPattern/BuilderPattern.csproj +++ b/BuilderPattern/BuilderPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/ChainOfResponsibilityPattern/ChainOfResponsibilityPattern.csproj b/ChainOfResponsibilityPattern/ChainOfResponsibilityPattern.csproj index 23df604..74abf5c 100644 --- a/ChainOfResponsibilityPattern/ChainOfResponsibilityPattern.csproj +++ b/ChainOfResponsibilityPattern/ChainOfResponsibilityPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.1 + net6.0 + enable + enable diff --git a/CommandPattern/CommandPattern.csproj b/CommandPattern/CommandPattern.csproj index ce1697a..74abf5c 100644 --- a/CommandPattern/CommandPattern.csproj +++ b/CommandPattern/CommandPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/CompositePattern/CompositePattern.csproj b/CompositePattern/CompositePattern.csproj index ce1697a..74abf5c 100644 --- a/CompositePattern/CompositePattern.csproj +++ b/CompositePattern/CompositePattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/DecoratorPattern/DecoratorPattern.csproj b/DecoratorPattern/DecoratorPattern.csproj index ce1697a..74abf5c 100644 --- a/DecoratorPattern/DecoratorPattern.csproj +++ b/DecoratorPattern/DecoratorPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/FacadePattern/FacadePattern.csproj b/FacadePattern/FacadePattern.csproj index ce1697a..74abf5c 100644 --- a/FacadePattern/FacadePattern.csproj +++ b/FacadePattern/FacadePattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/FactoryPattern/FactoryPattern.csproj b/FactoryPattern/FactoryPattern.csproj index 23df604..74abf5c 100644 --- a/FactoryPattern/FactoryPattern.csproj +++ b/FactoryPattern/FactoryPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.1 + net6.0 + enable + enable diff --git a/FlyweightPattern/FlyweightPattern.csproj b/FlyweightPattern/FlyweightPattern.csproj index 51b7f6c..74abf5c 100644 --- a/FlyweightPattern/FlyweightPattern.csproj +++ b/FlyweightPattern/FlyweightPattern.csproj @@ -1,8 +1,10 @@ - - Exe - netcoreapp2.1 - + + Exe + net6.0 + enable + enable + diff --git a/IteratorPattern/IteratorPattern.csproj b/IteratorPattern/IteratorPattern.csproj index ce1697a..74abf5c 100644 --- a/IteratorPattern/IteratorPattern.csproj +++ b/IteratorPattern/IteratorPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/MediatorPattern/MediatorPattern.csproj b/MediatorPattern/MediatorPattern.csproj index 51b7f6c..74abf5c 100644 --- a/MediatorPattern/MediatorPattern.csproj +++ b/MediatorPattern/MediatorPattern.csproj @@ -1,8 +1,10 @@ - - Exe - netcoreapp2.1 - + + Exe + net6.0 + enable + enable + diff --git a/ObserverPattern/ObserverPattern.csproj b/ObserverPattern/ObserverPattern.csproj index ce1697a..74abf5c 100644 --- a/ObserverPattern/ObserverPattern.csproj +++ b/ObserverPattern/ObserverPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/PrototypePattern/PrototypePattern.csproj b/PrototypePattern/PrototypePattern.csproj index 23df604..74abf5c 100644 --- a/PrototypePattern/PrototypePattern.csproj +++ b/PrototypePattern/PrototypePattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.1 + net6.0 + enable + enable diff --git a/ProxyPattern/ProxyPattern.csproj b/ProxyPattern/ProxyPattern.csproj index c73e0d1..74abf5c 100644 --- a/ProxyPattern/ProxyPattern.csproj +++ b/ProxyPattern/ProxyPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp3.1 + net6.0 + enable + enable diff --git a/SingletonPattern/SingletonPattern.csproj b/SingletonPattern/SingletonPattern.csproj index ce1697a..74abf5c 100644 --- a/SingletonPattern/SingletonPattern.csproj +++ b/SingletonPattern/SingletonPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/StatePattern/StatePattern.csproj b/StatePattern/StatePattern.csproj index ce1697a..74abf5c 100644 --- a/StatePattern/StatePattern.csproj +++ b/StatePattern/StatePattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/StrategyPattern/StrategyPattern.csproj b/StrategyPattern/StrategyPattern.csproj index ce1697a..74abf5c 100644 --- a/StrategyPattern/StrategyPattern.csproj +++ b/StrategyPattern/StrategyPattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/TemplatePattern/TemplatePattern.csproj b/TemplatePattern/TemplatePattern.csproj index ce1697a..74abf5c 100644 --- a/TemplatePattern/TemplatePattern.csproj +++ b/TemplatePattern/TemplatePattern.csproj @@ -2,7 +2,9 @@ Exe - netcoreapp2.0 + net6.0 + enable + enable diff --git a/VisitorPattern/VisitorPattern.csproj b/VisitorPattern/VisitorPattern.csproj index 51b7f6c..74abf5c 100644 --- a/VisitorPattern/VisitorPattern.csproj +++ b/VisitorPattern/VisitorPattern.csproj @@ -1,8 +1,10 @@ - - Exe - netcoreapp2.1 - + + Exe + net6.0 + enable + enable + From 463ef4ecb9f21d77c04d56693db6c938108d9b1d Mon Sep 17 00:00:00 2001 From: Volodymyr Tkachenko Date: Wed, 2 Nov 2022 19:40:39 +0200 Subject: [PATCH 12/16] Build fix: Improper Proxy pattern is removed from Flyghtweight pattern's project (#32) --- FlyweightPattern/ProxyPattern/Dimmer.cs | 14 -------- FlyweightPattern/ProxyPattern/Dvd.cs | 11 ------ FlyweightPattern/ProxyPattern/DvdPlayer.cs | 30 ---------------- .../ProxyPattern/HometheaterFacade.cs | 36 ------------------- FlyweightPattern/ProxyPattern/Program.cs | 23 ------------ .../ProxyPattern/ProxyPattern.csproj | 8 ----- 6 files changed, 122 deletions(-) delete mode 100644 FlyweightPattern/ProxyPattern/Dimmer.cs delete mode 100644 FlyweightPattern/ProxyPattern/Dvd.cs delete mode 100644 FlyweightPattern/ProxyPattern/DvdPlayer.cs delete mode 100644 FlyweightPattern/ProxyPattern/HometheaterFacade.cs delete mode 100644 FlyweightPattern/ProxyPattern/Program.cs delete mode 100644 FlyweightPattern/ProxyPattern/ProxyPattern.csproj diff --git a/FlyweightPattern/ProxyPattern/Dimmer.cs b/FlyweightPattern/ProxyPattern/Dimmer.cs deleted file mode 100644 index 11c35df..0000000 --- a/FlyweightPattern/ProxyPattern/Dimmer.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; - -namespace FacadePattern -{ - public class Dimmer - { - internal void Dim(int val) - { - Console.WriteLine(val == 10 ? "Turning Lights On" : $"Dimming lights to {val}"); - } - - internal void Off() => Console.WriteLine("Switching off lights"); - } -} diff --git a/FlyweightPattern/ProxyPattern/Dvd.cs b/FlyweightPattern/ProxyPattern/Dvd.cs deleted file mode 100644 index b247c62..0000000 --- a/FlyweightPattern/ProxyPattern/Dvd.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace FacadePattern -{ - public class Dvd - { - public Dvd(string name) - { - Movie = name; - } - public string Movie { get; set; } - } -} \ No newline at end of file diff --git a/FlyweightPattern/ProxyPattern/DvdPlayer.cs b/FlyweightPattern/ProxyPattern/DvdPlayer.cs deleted file mode 100644 index f442655..0000000 --- a/FlyweightPattern/ProxyPattern/DvdPlayer.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; - -namespace FacadePattern -{ - public class DvdPlayer - { - private Dvd _dvd; - private int _time = 0; - public void On() => Console.WriteLine("DVD Player powered on"); - - public void Insert(Dvd dvd) - { - _dvd = dvd; - Console.WriteLine($"Inserting {dvd.Movie}"); - - } - - public void Play() => Console.WriteLine($"Playing {_dvd.Movie}"); - - public void Pause() - { - Console.WriteLine($"Pausing at {_time = (new Random()).Next(_time, _time + 120)}"); - } - - public void Resume() - { - Console.WriteLine($"Resuming from {_time}"); - } - } -} \ No newline at end of file diff --git a/FlyweightPattern/ProxyPattern/HometheaterFacade.cs b/FlyweightPattern/ProxyPattern/HometheaterFacade.cs deleted file mode 100644 index 703828e..0000000 --- a/FlyweightPattern/ProxyPattern/HometheaterFacade.cs +++ /dev/null @@ -1,36 +0,0 @@ -namespace FacadePattern -{ - public class HomeTheatreFacade - { - private Dimmer _dimmer; - private Dvd _dvd; - private DvdPlayer _dvdPlayer; - - public HomeTheatreFacade(Dimmer dimmer, Dvd dvd, DvdPlayer dvdPlayer) - { - _dvd = dvd; - _dimmer = dimmer; - _dvdPlayer = dvdPlayer; - } - - public void WatchMovie() - { - _dimmer.Dim(5); - _dvdPlayer.On(); - _dvdPlayer.Insert(_dvd); - _dvdPlayer.Play(); - } - - public void Pause() - { - _dimmer.Dim(10); - _dvdPlayer.Pause(); - } - - public void Resume() - { - _dimmer.Dim(5); - _dvdPlayer.Resume(); - } - } -} \ No newline at end of file diff --git a/FlyweightPattern/ProxyPattern/Program.cs b/FlyweightPattern/ProxyPattern/Program.cs deleted file mode 100644 index 074539c..0000000 --- a/FlyweightPattern/ProxyPattern/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; - -namespace FacadePattern -{ - internal static class Program - { - private static void Main() - { - var dimmer = new Dimmer(); - var dvdPlayer = new DvdPlayer(); - var dvd = new Dvd("Gone with the Wind 2 : Electric Bugaloo"); - var homeTheater = new HomeTheatreFacade(dimmer, dvd, dvdPlayer); - - homeTheater.WatchMovie(); - Console.WriteLine(); - homeTheater.Pause(); - Console.WriteLine(); - homeTheater.Resume(); - Console.WriteLine(); - homeTheater.Pause(); - } - } -} diff --git a/FlyweightPattern/ProxyPattern/ProxyPattern.csproj b/FlyweightPattern/ProxyPattern/ProxyPattern.csproj deleted file mode 100644 index ce1697a..0000000 --- a/FlyweightPattern/ProxyPattern/ProxyPattern.csproj +++ /dev/null @@ -1,8 +0,0 @@ - - - - Exe - netcoreapp2.0 - - - From ce571e3627ed26ed936aba88ab45c8bc590f3a59 Mon Sep 17 00:00:00 2001 From: Abishek Aditya Date: Wed, 2 Nov 2022 23:12:50 +0530 Subject: [PATCH 13/16] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d16ff9f..6039801 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ There are better alternatives available for some of them in the .NET Framework, Any comments and suggestions are welcome. If you want to add a new design pattern implementation, just follow the naming convention, fork my repo and submit a pull request. Same goes for any improvements and modifications. +This was created as a C# alternative to Java while reading https://www.oreilly.com/library/view/head-first-design/0596007124/ <- take a look at it if anything confuses you. + ## Types of Design Patterns --------------------------- There are three kinds of Design Patterns: From 3574c8a52c6d1236710a08c6bdd9bfaf84e8e732 Mon Sep 17 00:00:00 2001 From: Ale-na98 <86318402+Ale-na98@users.noreply.github.com> Date: Wed, 2 Nov 2022 18:43:27 +0100 Subject: [PATCH 14/16] Add unit test for Singleton pattern (#29) --- DesignPatternsDotNetCore.sln | 20 +++++++++++++--- .../SingletonPattern.Tests.csproj | 23 +++++++++++++++++++ .../SingletonPatternTests.cs | 17 ++++++++++++++ SingletonPattern.Tests/Usings.cs | 1 + SingletonPattern/Properties/AssemblyInfo.cs | 3 +++ 5 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 SingletonPattern.Tests/SingletonPattern.Tests.csproj create mode 100644 SingletonPattern.Tests/SingletonPatternTests.cs create mode 100644 SingletonPattern.Tests/Usings.cs create mode 100644 SingletonPattern/Properties/AssemblyInfo.cs diff --git a/DesignPatternsDotNetCore.sln b/DesignPatternsDotNetCore.sln index 5f9a763..3a7677a 100644 --- a/DesignPatternsDotNetCore.sln +++ b/DesignPatternsDotNetCore.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29920.165 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32825.248 MinimumVisualStudioVersion = 15.0.26124.0 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdapterPattern", "AdapterPattern\AdapterPattern.csproj", "{79553F75-E8DC-4988-B511-A79CC6A9CDF7}" EndProject @@ -38,7 +38,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MediatorPattern", "Mediator EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuilderPattern", "BuilderPattern\BuilderPattern.csproj", "{274786D8-2E30-40D7-81B5-DFA3872CF9B6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProxyPattern", "ProxyPattern\ProxyPattern.csproj", "{0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProxyPattern", "ProxyPattern\ProxyPattern.csproj", "{0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SingletonPattern.Tests", "SingletonPattern.Tests\SingletonPattern.Tests.csproj", "{7A21A074-AEBB-4B33-80BA-D7DFBE87A449}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -278,6 +280,18 @@ Global {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|x64.Build.0 = Release|Any CPU {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|x86.ActiveCfg = Release|Any CPU {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|x86.Build.0 = Release|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Debug|x64.ActiveCfg = Debug|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Debug|x64.Build.0 = Debug|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Debug|x86.ActiveCfg = Debug|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Debug|x86.Build.0 = Debug|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Release|Any CPU.Build.0 = Release|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Release|x64.ActiveCfg = Release|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Release|x64.Build.0 = Release|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Release|x86.ActiveCfg = Release|Any CPU + {7A21A074-AEBB-4B33-80BA-D7DFBE87A449}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SingletonPattern.Tests/SingletonPattern.Tests.csproj b/SingletonPattern.Tests/SingletonPattern.Tests.csproj new file mode 100644 index 0000000..ec8a874 --- /dev/null +++ b/SingletonPattern.Tests/SingletonPattern.Tests.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + enable + enable + + false + + + + + + + + + + + + + + + diff --git a/SingletonPattern.Tests/SingletonPatternTests.cs b/SingletonPattern.Tests/SingletonPatternTests.cs new file mode 100644 index 0000000..f015dfc --- /dev/null +++ b/SingletonPattern.Tests/SingletonPatternTests.cs @@ -0,0 +1,17 @@ +namespace SingletonPattern.Tests +{ + [TestFixture] + public class SingletonPatternTests + { + [Test] + public void GetInstance_CreateInstanceTwice_AreEqual() + { + // Arrange, Act + var firstAttemptInstance = ChocolateBoiler.GetInstance(); + var secondAttemptInstance = ChocolateBoiler.GetInstance(); + + // Assert + Assert.That(firstAttemptInstance, Is.EqualTo(secondAttemptInstance)); + } + } +} diff --git a/SingletonPattern.Tests/Usings.cs b/SingletonPattern.Tests/Usings.cs new file mode 100644 index 0000000..3244567 --- /dev/null +++ b/SingletonPattern.Tests/Usings.cs @@ -0,0 +1 @@ +global using NUnit.Framework; diff --git a/SingletonPattern/Properties/AssemblyInfo.cs b/SingletonPattern/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f6a8309 --- /dev/null +++ b/SingletonPattern/Properties/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly:InternalsVisibleTo("SingletonPattern.Tests")] From 34b417f9b52336378416e32b32e7243d41348416 Mon Sep 17 00:00:00 2001 From: FunkyMonk8111 <100250024+FunkyMonk8111@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:09:32 -0500 Subject: [PATCH 15/16] Adding missing design pattern links (#34) Added the typo or missing design pattern links per issue #22 --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6039801..f82eb91 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,8 @@ There are three kinds of Design Patterns: * [Adapter](/AdapterPattern) * [Bridge](/BridgePattern) +* [Builder](/BuilderPattern) +* [ChainOfResponsibility](/ChainOfResponsibilityPattern) * [Command](/CommandPattern) * [Composite](/CompositePattern) * [Decorator](/DecoratorPattern) @@ -27,11 +29,13 @@ There are three kinds of Design Patterns: * [Factory](/FactoryPattern) * [Flyweight](/FlyweightPattern) * [Iterator](/IteratorPattern) +* [Mediator](/MediatorPattern) * [Observer](/ObserverPattern) +* [Prototype](/PrototypePattern) +* [Proxy](/ProxyPattern) * [Singleton](/SingletonPattern) +* [SingletonPattern.Tests](/SingletonPattern.Tests) * [State](/StatePattern) * [Strategy](/StrategyPattern) * [Template](/TemplatePattern) * [Visitor](/VisitorPattern) -* [Mediator](/MediatorPattern) -* [Proxy](/ProxyPattern) From 3975eae85bf104af87e94efa592548a325624f83 Mon Sep 17 00:00:00 2001 From: vikramvee Date: Thu, 11 Jan 2024 03:40:17 +0530 Subject: [PATCH 16/16] Cleaned the code by removing the string literals (#33) * Removed the use of String Literals * Removed the use of String Literals for clean code --- .../Factory Method/ChicagoPizzaFactory.cs | 16 ++++++++++------ .../Factory Method/NYPizzaFactory.cs | 16 ++++++++++------ FactoryPattern/Factory Method/PizzaFactory.cs | 4 ++-- FactoryPattern/Helper.cs | 18 ++++++++++++++++++ FactoryPattern/Program.cs | 4 ++-- 5 files changed, 42 insertions(+), 16 deletions(-) create mode 100644 FactoryPattern/Helper.cs diff --git a/FactoryPattern/Factory Method/ChicagoPizzaFactory.cs b/FactoryPattern/Factory Method/ChicagoPizzaFactory.cs index 2075587..234bdb0 100644 --- a/FactoryPattern/Factory Method/ChicagoPizzaFactory.cs +++ b/FactoryPattern/Factory Method/ChicagoPizzaFactory.cs @@ -2,25 +2,29 @@ { class ChicagoPizzaFactory : PizzaFactory { - protected override Pizza Create(string type) + private readonly string chicagoCheese = "Chicago Cheese"; + private readonly string chicagoClam = "Chicago Clam"; + private readonly string chicagoVeggie = "Chicago Veggie"; + + protected override Pizza Create(PizzaType type) { Pizza pizza; IIngredientsFactory ingredients = new ChicagoIngredientsFactory(); - if (type.Equals("Cheese")) + if (type == PizzaType.Cheese) { pizza = new CheesePizza(ingredients); - pizza.Name = "Chicago Cheese"; + pizza.Name = chicagoCheese; } - else if (type.Equals("Clam")) + else if (type == PizzaType.Clam) { pizza = new ClamPizza(ingredients); - pizza.Name = "Chicago Clam"; + pizza.Name = chicagoClam; } else { pizza = new VeggiePizza(ingredients); - pizza.Name = "Chicago Veggie"; + pizza.Name = chicagoVeggie; } pizza.Color = "red"; return pizza; diff --git a/FactoryPattern/Factory Method/NYPizzaFactory.cs b/FactoryPattern/Factory Method/NYPizzaFactory.cs index 2c24bff..de2d0b7 100644 --- a/FactoryPattern/Factory Method/NYPizzaFactory.cs +++ b/FactoryPattern/Factory Method/NYPizzaFactory.cs @@ -2,22 +2,26 @@ { class NyPizzaFactory : PizzaFactory { - protected override Pizza Create(string type) + private readonly string nyStyleCheese = "NY Style Cheese"; + private readonly string nyStyleClam = "NY Style Clam"; + private readonly string nyStyleVeggie = "NY Style Veggie"; + + protected override Pizza Create(PizzaType type) { Pizza pizza; IIngredientsFactory ingredients = new NyIngredientsFactory(); - if (type.Equals("Cheese")) + if (type == PizzaType.Cheese) { - pizza = new CheesePizza(ingredients) { Name = "NY Style Cheese" }; + pizza = new CheesePizza(ingredients) { Name = nyStyleCheese }; } - else if (type.Equals("Clam")) + else if (type == PizzaType.Clam) { - pizza = new ClamPizza(ingredients) { Name = "NY Style Clam" }; + pizza = new ClamPizza(ingredients) { Name = nyStyleClam }; } else { - pizza = new VeggiePizza(ingredients) { Name = "NY Style Veggie" }; + pizza = new VeggiePizza(ingredients) { Name = nyStyleVeggie }; } pizza.Color = "blue"; return pizza; diff --git a/FactoryPattern/Factory Method/PizzaFactory.cs b/FactoryPattern/Factory Method/PizzaFactory.cs index 31ead68..f0b7a38 100644 --- a/FactoryPattern/Factory Method/PizzaFactory.cs +++ b/FactoryPattern/Factory Method/PizzaFactory.cs @@ -2,7 +2,7 @@ { abstract class PizzaFactory { - public Pizza Order(string type) + public Pizza Order(PizzaType type) { var pizza = Create(type); pizza.Prepare(); @@ -12,6 +12,6 @@ public Pizza Order(string type) return pizza; } - protected abstract Pizza Create(string type); + protected abstract Pizza Create(PizzaType type); } } diff --git a/FactoryPattern/Helper.cs b/FactoryPattern/Helper.cs new file mode 100644 index 0000000..4a897e8 --- /dev/null +++ b/FactoryPattern/Helper.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FactoryPattern +{ + internal class Helper + { + } + + internal enum PizzaType + { + Cheese, + Clam + } +} diff --git a/FactoryPattern/Program.cs b/FactoryPattern/Program.cs index d16bc6f..0612463 100644 --- a/FactoryPattern/Program.cs +++ b/FactoryPattern/Program.cs @@ -8,11 +8,11 @@ static void Main() { Console.WriteLine("Yankees fan orders:"); var yankees = new NyPizzaFactory(); - yankees.Order("Cheese"); + yankees.Order(PizzaType.Cheese); Console.WriteLine(); Console.WriteLine("Cubs fan orders:"); var cubs = new ChicagoPizzaFactory(); - cubs.Order("Clam"); + cubs.Order(PizzaType.Clam); } } } \ No newline at end of file