From 6f69b357dd21a13a8016256bc803b3d71b7f11ab Mon Sep 17 00:00:00 2001 From: syneffort Date: Mon, 13 Mar 2023 09:44:44 +0900 Subject: [PATCH] bridge --- DesignPatternGuru/Bridge/Bridge.csproj | 10 ++++++++ .../Bridge/Bridges/Abstraction.cs | 24 +++++++++++++++++++ .../Bridge/Bridges/ExtendedAbstraction.cs | 21 ++++++++++++++++ DesignPatternGuru/Bridge/Client.cs | 17 +++++++++++++ .../ConcreteImplementationA.cs | 16 +++++++++++++ .../ConcreteImplementationB.cs | 16 +++++++++++++ .../Bridge/Implementations/IImplementation.cs | 13 ++++++++++ DesignPatternGuru/Bridge/Program.cs | 22 +++++++++++++++++ DesignPatternGuru/DesignPatternGuru.sln | 7 ++++++ 9 files changed, 146 insertions(+) create mode 100644 DesignPatternGuru/Bridge/Bridge.csproj create mode 100644 DesignPatternGuru/Bridge/Bridges/Abstraction.cs create mode 100644 DesignPatternGuru/Bridge/Bridges/ExtendedAbstraction.cs create mode 100644 DesignPatternGuru/Bridge/Client.cs create mode 100644 DesignPatternGuru/Bridge/Implementations/ConcreteImplementationA.cs create mode 100644 DesignPatternGuru/Bridge/Implementations/ConcreteImplementationB.cs create mode 100644 DesignPatternGuru/Bridge/Implementations/IImplementation.cs create mode 100644 DesignPatternGuru/Bridge/Program.cs diff --git a/DesignPatternGuru/Bridge/Bridge.csproj b/DesignPatternGuru/Bridge/Bridge.csproj new file mode 100644 index 0000000..74abf5c --- /dev/null +++ b/DesignPatternGuru/Bridge/Bridge.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/DesignPatternGuru/Bridge/Bridges/Abstraction.cs b/DesignPatternGuru/Bridge/Bridges/Abstraction.cs new file mode 100644 index 0000000..d5c49a6 --- /dev/null +++ b/DesignPatternGuru/Bridge/Bridges/Abstraction.cs @@ -0,0 +1,24 @@ +using Bridge.Implementations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bridge.Bridges +{ + internal class Abstraction + { + protected IImplementation _implementation; + + public Abstraction(IImplementation implementation) + { + _implementation = implementation; + } + + public virtual string Operation() + { + return $"Abstract: Base operation with: {_implementation.OperationImplementation()}"; + } + } +} diff --git a/DesignPatternGuru/Bridge/Bridges/ExtendedAbstraction.cs b/DesignPatternGuru/Bridge/Bridges/ExtendedAbstraction.cs new file mode 100644 index 0000000..ff95818 --- /dev/null +++ b/DesignPatternGuru/Bridge/Bridges/ExtendedAbstraction.cs @@ -0,0 +1,21 @@ +using Bridge.Implementations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bridge.Bridges +{ + internal class ExtendedAbstraction : Abstraction + { + public ExtendedAbstraction(IImplementation implementation) : base(implementation) + { + } + + public override string Operation() + { + return $"ExtendedAbstraction: Extended operation with: {_implementation.OperationImplementation()}"; + } + } +} diff --git a/DesignPatternGuru/Bridge/Client.cs b/DesignPatternGuru/Bridge/Client.cs new file mode 100644 index 0000000..1477b4c --- /dev/null +++ b/DesignPatternGuru/Bridge/Client.cs @@ -0,0 +1,17 @@ +using Bridge.Bridges; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bridge +{ + internal class Client + { + public void ClientCode(Abstraction abstraction) + { + Console.WriteLine(abstraction.Operation()); + } + } +} diff --git a/DesignPatternGuru/Bridge/Implementations/ConcreteImplementationA.cs b/DesignPatternGuru/Bridge/Implementations/ConcreteImplementationA.cs new file mode 100644 index 0000000..2108923 --- /dev/null +++ b/DesignPatternGuru/Bridge/Implementations/ConcreteImplementationA.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bridge.Implementations +{ + internal class ConcreteImplementationA : IImplementation + { + public string OperationImplementation() + { + return "ConcreteImplementationA: The result in platform A."; + } + } +} diff --git a/DesignPatternGuru/Bridge/Implementations/ConcreteImplementationB.cs b/DesignPatternGuru/Bridge/Implementations/ConcreteImplementationB.cs new file mode 100644 index 0000000..082ae50 --- /dev/null +++ b/DesignPatternGuru/Bridge/Implementations/ConcreteImplementationB.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bridge.Implementations +{ + internal class ConcreteImplementationB : IImplementation + { + public string OperationImplementation() + { + return "ConcreteImplementationB: The result in platform B."; + } + } +} diff --git a/DesignPatternGuru/Bridge/Implementations/IImplementation.cs b/DesignPatternGuru/Bridge/Implementations/IImplementation.cs new file mode 100644 index 0000000..dfeda8b --- /dev/null +++ b/DesignPatternGuru/Bridge/Implementations/IImplementation.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bridge.Implementations +{ + internal interface IImplementation + { + string OperationImplementation(); + } +} diff --git a/DesignPatternGuru/Bridge/Program.cs b/DesignPatternGuru/Bridge/Program.cs new file mode 100644 index 0000000..a404d7d --- /dev/null +++ b/DesignPatternGuru/Bridge/Program.cs @@ -0,0 +1,22 @@ +using Bridge.Bridges; +using Bridge.Implementations; + +namespace Bridge +{ + internal class Program + { + static void Main(string[] args) + { + Client client = new Client(); + + Abstraction abstraction; + abstraction = new Abstraction(new ConcreteImplementationA()); + client.ClientCode(abstraction); + + Console.WriteLine(); + + abstraction = new ExtendedAbstraction(new ConcreteImplementationB()); + client.ClientCode(abstraction); + } + } +} \ No newline at end of file diff --git a/DesignPatternGuru/DesignPatternGuru.sln b/DesignPatternGuru/DesignPatternGuru.sln index dc96b8d..e85b917 100644 --- a/DesignPatternGuru/DesignPatternGuru.sln +++ b/DesignPatternGuru/DesignPatternGuru.sln @@ -19,6 +19,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StructuralPatterns", "Struc EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Adapter", "Adapter\Adapter.csproj", "{4E8B1160-0BD2-42FD-9DB8-991CAA88578A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bridge", "Bridge\Bridge.csproj", "{60D1EE6E-282D-4613-8B1D-DE355768DCBA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -49,6 +51,10 @@ Global {4E8B1160-0BD2-42FD-9DB8-991CAA88578A}.Debug|Any CPU.Build.0 = Debug|Any CPU {4E8B1160-0BD2-42FD-9DB8-991CAA88578A}.Release|Any CPU.ActiveCfg = Release|Any CPU {4E8B1160-0BD2-42FD-9DB8-991CAA88578A}.Release|Any CPU.Build.0 = Release|Any CPU + {60D1EE6E-282D-4613-8B1D-DE355768DCBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60D1EE6E-282D-4613-8B1D-DE355768DCBA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60D1EE6E-282D-4613-8B1D-DE355768DCBA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60D1EE6E-282D-4613-8B1D-DE355768DCBA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -60,6 +66,7 @@ Global {3A8E007E-79D4-499B-8D19-BF745EC9C68E} = {C470237E-3C3B-49E3-BA4C-86884EC28413} {79AC3F3A-CE95-40C4-94E6-31CC85494E41} = {C470237E-3C3B-49E3-BA4C-86884EC28413} {4E8B1160-0BD2-42FD-9DB8-991CAA88578A} = {0B9333EC-FB73-4FEE-B600-9ECCD5A356B1} + {60D1EE6E-282D-4613-8B1D-DE355768DCBA} = {0B9333EC-FB73-4FEE-B600-9ECCD5A356B1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3E5A9C6B-2E8A-466E-B5E0-4379902EFFAC}