diff --git a/DesignPatternGuru/DesignPatternGuru.sln b/DesignPatternGuru/DesignPatternGuru.sln index 113485f..9895e1e 100644 --- a/DesignPatternGuru/DesignPatternGuru.sln +++ b/DesignPatternGuru/DesignPatternGuru.sln @@ -23,7 +23,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bridge", "Bridge\Bridge.csp EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Composite", "Composite\Composite.csproj", "{8EAAC7FD-ED5E-4567-B1C1-F79AC79C9820}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Decorator", "Decorator\Decorator.csproj", "{8AA3ECFD-4F9A-433D-884C-E76E5050AFBF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Decorator", "Decorator\Decorator.csproj", "{8AA3ECFD-4F9A-433D-884C-E76E5050AFBF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facade", "Facade\Facade.csproj", "{7D6D306D-BC44-407A-9A39-104C90A3FA39}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -67,6 +69,10 @@ Global {8AA3ECFD-4F9A-433D-884C-E76E5050AFBF}.Debug|Any CPU.Build.0 = Debug|Any CPU {8AA3ECFD-4F9A-433D-884C-E76E5050AFBF}.Release|Any CPU.ActiveCfg = Release|Any CPU {8AA3ECFD-4F9A-433D-884C-E76E5050AFBF}.Release|Any CPU.Build.0 = Release|Any CPU + {7D6D306D-BC44-407A-9A39-104C90A3FA39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D6D306D-BC44-407A-9A39-104C90A3FA39}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D6D306D-BC44-407A-9A39-104C90A3FA39}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D6D306D-BC44-407A-9A39-104C90A3FA39}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -81,6 +87,7 @@ Global {60D1EE6E-282D-4613-8B1D-DE355768DCBA} = {0B9333EC-FB73-4FEE-B600-9ECCD5A356B1} {8EAAC7FD-ED5E-4567-B1C1-F79AC79C9820} = {0B9333EC-FB73-4FEE-B600-9ECCD5A356B1} {8AA3ECFD-4F9A-433D-884C-E76E5050AFBF} = {0B9333EC-FB73-4FEE-B600-9ECCD5A356B1} + {7D6D306D-BC44-407A-9A39-104C90A3FA39} = {0B9333EC-FB73-4FEE-B600-9ECCD5A356B1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3E5A9C6B-2E8A-466E-B5E0-4379902EFFAC} diff --git a/DesignPatternGuru/Facade/Client.cs b/DesignPatternGuru/Facade/Client.cs new file mode 100644 index 0000000..a9d36f7 --- /dev/null +++ b/DesignPatternGuru/Facade/Client.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Facade +{ + internal class Client + { + public static void ClientCode(Facades.Facade facade) + { + Console.WriteLine(facade.Operation()); + } + } +} diff --git a/DesignPatternGuru/Facade/Facade.csproj b/DesignPatternGuru/Facade/Facade.csproj new file mode 100644 index 0000000..9ad2a07 --- /dev/null +++ b/DesignPatternGuru/Facade/Facade.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/DesignPatternGuru/Facade/Facades/Facade.cs b/DesignPatternGuru/Facade/Facades/Facade.cs new file mode 100644 index 0000000..8ff845c --- /dev/null +++ b/DesignPatternGuru/Facade/Facades/Facade.cs @@ -0,0 +1,34 @@ +using Facade.Subsystems; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Facade.Facades +{ + internal class Facade + { + protected Subsystem1 _subsystem1; + protected Subsystem2 _subsystem2; + + public Facade(Subsystem1 subsystem1, Subsystem2 subsystem2) + { + _subsystem1 = subsystem1; + _subsystem2 = subsystem2; + } + + public string Operation() + { + StringBuilder builder = new StringBuilder(); + builder.AppendLine("Facade initializes subsystems:"); + builder.AppendLine(_subsystem1.Operation1()); + builder.AppendLine(_subsystem2.Operation1()); + builder.AppendLine("Facade order subsystems to perform the action:"); + builder.AppendLine(_subsystem1.OperationN()); + builder.AppendLine(_subsystem2.OperationN()); + + return builder.ToString(); + } + } +} diff --git a/DesignPatternGuru/Facade/Program.cs b/DesignPatternGuru/Facade/Program.cs new file mode 100644 index 0000000..fcd4223 --- /dev/null +++ b/DesignPatternGuru/Facade/Program.cs @@ -0,0 +1,15 @@ +using Facade.Subsystems; + +namespace Facade +{ + internal class Program + { + static void Main(string[] args) + { + Subsystem1 subsystem1 = new Subsystem1(); + Subsystem2 subsystem2 = new Subsystem2(); + Facades.Facade facade = new Facades.Facade(subsystem1, subsystem2); + Client.ClientCode(facade); + } + } +} \ No newline at end of file diff --git a/DesignPatternGuru/Facade/Subsystems/Subsystem1.cs b/DesignPatternGuru/Facade/Subsystems/Subsystem1.cs new file mode 100644 index 0000000..5ec752b --- /dev/null +++ b/DesignPatternGuru/Facade/Subsystems/Subsystem1.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Facade.Subsystems +{ + internal class Subsystem1 + { + public string Operation1() + { + return "Subsystem1: Ready!"; + } + + public string OperationN() + { + return "Subsystem1: Go!"; + } + } +} diff --git a/DesignPatternGuru/Facade/Subsystems/Subsystem2.cs b/DesignPatternGuru/Facade/Subsystems/Subsystem2.cs new file mode 100644 index 0000000..b38bba3 --- /dev/null +++ b/DesignPatternGuru/Facade/Subsystems/Subsystem2.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Facade.Subsystems +{ + internal class Subsystem2 + { + public string Operation1() + { + return "Subsystem2: Get ready!"; + } + + public string OperationN() + { + return "Subsystem: Fire!"; + } + } +}