diff --git a/DesignPattern/Adapter/Adapter.csproj b/DesignPattern/Adapter/Adapter.csproj new file mode 100644 index 0000000..acb98ee --- /dev/null +++ b/DesignPattern/Adapter/Adapter.csproj @@ -0,0 +1,58 @@ + + + + + Debug + AnyCPU + {B7ADC626-22C7-4BE8-9385-ABA3AD428878} + Exe + Adapter + Adapter + v4.8 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DesignPattern/Adapter/App.config b/DesignPattern/Adapter/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/DesignPattern/Adapter/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/DesignPattern/Adapter/Client.cs b/DesignPattern/Adapter/Client.cs new file mode 100644 index 0000000..915e6e7 --- /dev/null +++ b/DesignPattern/Adapter/Client.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Adapter +{ + class Client + { + private bool vgaMonitor = true; + + public void HowToUse() + { + IAdapter hdmi; + + if (vgaMonitor) + hdmi = new HdmiToVgaAdapter(); + else + hdmi = new HdmiAdapter(); + + byte[] data = new byte[] { byte.MinValue, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, byte.MaxValue }; + DisplyData(hdmi, data); + } + + private void DisplyData(IAdapter adapter, byte[] data) + { + adapter.Disply(data); + } + } +} diff --git a/DesignPattern/Adapter/HdmiAdapter.cs b/DesignPattern/Adapter/HdmiAdapter.cs new file mode 100644 index 0000000..f8fddbb --- /dev/null +++ b/DesignPattern/Adapter/HdmiAdapter.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Adapter +{ + class HdmiAdapter : IAdapter + { + public void Disply(byte[] data) + { + Console.WriteLine("HDMI"); + foreach (byte b in data) + { + Console.WriteLine($"{b} "); + } + } + } +} diff --git a/DesignPattern/Adapter/HdmiToVgaAdapter.cs b/DesignPattern/Adapter/HdmiToVgaAdapter.cs new file mode 100644 index 0000000..b732028 --- /dev/null +++ b/DesignPattern/Adapter/HdmiToVgaAdapter.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Adapter +{ + class HdmiToVgaAdapter : IAdapter + { + private LegacyVGA vga = new LegacyVGA(); + + public void Disply(byte[] data) + { + vga.Display(data); + } + } +} diff --git a/DesignPattern/Adapter/IAdapter.cs b/DesignPattern/Adapter/IAdapter.cs new file mode 100644 index 0000000..a60b2ba --- /dev/null +++ b/DesignPattern/Adapter/IAdapter.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Adapter +{ + interface IAdapter + { + void Disply(byte[] data); + } +} diff --git a/DesignPattern/Adapter/LegacyVGA.cs b/DesignPattern/Adapter/LegacyVGA.cs new file mode 100644 index 0000000..1b87157 --- /dev/null +++ b/DesignPattern/Adapter/LegacyVGA.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Adapter +{ + class LegacyVGA + { + public void Display(byte[] data) + { + Console.WriteLine("VGA"); + foreach (byte b in data) + { + Console.WriteLine($"{b} "); + } + } + } +} diff --git a/DesignPattern/Adapter/Program.cs b/DesignPattern/Adapter/Program.cs new file mode 100644 index 0000000..3f5d515 --- /dev/null +++ b/DesignPattern/Adapter/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Adapter +{ + /* + * 카테고리: 구조 패턴 + * 개요: 기존 라이브러리 또는 시스템의 인터페이스가 현재 시스템과 호환되지 않을 때, + * 중간 인터페이스를 연결해 줌 + */ + class Program + { + static void Main(string[] args) + { + Client client = new Client(); + client.HowToUse(); + + Console.ReadKey(); + } + } +} diff --git a/DesignPattern/Adapter/Properties/AssemblyInfo.cs b/DesignPattern/Adapter/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3f51804 --- /dev/null +++ b/DesignPattern/Adapter/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 +// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 +// 이러한 특성 값을 변경하세요. +[assembly: AssemblyTitle("Adapter")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Adapter")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 +// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 +// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. +[assembly: ComVisible(false)] + +// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. +[assembly: Guid("b7adc626-22c7-4be8-9385-aba3ad428878")] + +// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다. +// +// 주 버전 +// 부 버전 +// 빌드 번호 +// 수정 버전 +// +// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를 +// 기본값으로 할 수 있습니다. +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/DesignPattern/DesignPattern.sln b/DesignPattern/DesignPattern.sln index 42e621a..1453451 100644 --- a/DesignPattern/DesignPattern.sln +++ b/DesignPattern/DesignPattern.sln @@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prototype", "Prototype\Prot EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ObjectPool", "ObjectPool\ObjectPool.csproj", "{64993D9F-0D9E-42B6-B032-800DA2DD453B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Adapter", "Adapter\Adapter.csproj", "{B7ADC626-22C7-4BE8-9385-ABA3AD428878}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,6 +41,10 @@ Global {64993D9F-0D9E-42B6-B032-800DA2DD453B}.Debug|Any CPU.Build.0 = Debug|Any CPU {64993D9F-0D9E-42B6-B032-800DA2DD453B}.Release|Any CPU.ActiveCfg = Release|Any CPU {64993D9F-0D9E-42B6-B032-800DA2DD453B}.Release|Any CPU.Build.0 = Release|Any CPU + {B7ADC626-22C7-4BE8-9385-ABA3AD428878}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7ADC626-22C7-4BE8-9385-ABA3AD428878}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B7ADC626-22C7-4BE8-9385-ABA3AD428878}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7ADC626-22C7-4BE8-9385-ABA3AD428878}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE