diff --git a/DesignPattern/Builder/App.config b/DesignPattern/Builder/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/DesignPattern/Builder/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/DesignPattern/Builder/Bed.cs b/DesignPattern/Builder/Bed.cs new file mode 100644 index 0000000..d8d323e --- /dev/null +++ b/DesignPattern/Builder/Bed.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder +{ + public class Bed + { + public string Frame { get; set; } + public string Mattress { get; set; } + public string Pillow { get; set; } + public string Sheet { get; set; } + + public override string ToString() + { + return $"Frame: {Frame}, Mattress: {Mattress}, Pillow: {Pillow}, Sheet: {Sheet}"; + } + } +} diff --git a/DesignPattern/Builder/Builder.cs b/DesignPattern/Builder/Builder.cs new file mode 100644 index 0000000..5b1f1fd --- /dev/null +++ b/DesignPattern/Builder/Builder.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder +{ + class Builder + { + } +} diff --git a/DesignPattern/Builder/Builder.csproj b/DesignPattern/Builder/Builder.csproj new file mode 100644 index 0000000..64aabe8 --- /dev/null +++ b/DesignPattern/Builder/Builder.csproj @@ -0,0 +1,59 @@ + + + + + Debug + AnyCPU + {01181F37-48B4-4C0B-BE41-F8693C8B9E81} + Exe + Builder + Builder + 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/Builder/Client.cs b/DesignPattern/Builder/Client.cs new file mode 100644 index 0000000..90a1a6c --- /dev/null +++ b/DesignPattern/Builder/Client.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder +{ + class Client + { + public static void HowToTest() + { + IBedBuilder builder = new Simons(); + Director director = new Director(); + Bed bed = director.Construct(builder); + + Console.WriteLine(bed.ToString()); + } + } +} diff --git a/DesignPattern/Builder/Director.cs b/DesignPattern/Builder/Director.cs new file mode 100644 index 0000000..5097f26 --- /dev/null +++ b/DesignPattern/Builder/Director.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder +{ + class Director + { + public Bed Construct(IBedBuilder builder) + { + Bed bed = builder + .MakeFrame() + .MakeMattress() + .MakeSheet("White") + .MakePillow(10) + .Build(); + + return bed; + } + } +} diff --git a/DesignPattern/Builder/IBedBuilder.cs b/DesignPattern/Builder/IBedBuilder.cs new file mode 100644 index 0000000..bbee4f7 --- /dev/null +++ b/DesignPattern/Builder/IBedBuilder.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder +{ + /*Builder (Fluent)*/ + public interface IBedBuilder + { + IBedBuilder MakeFrame(); + IBedBuilder MakeMattress(); + IBedBuilder MakeSheet(string sheet); + IBedBuilder MakePillow(int size); + Bed Build(); + } +} diff --git a/DesignPattern/Builder/Program.cs b/DesignPattern/Builder/Program.cs new file mode 100644 index 0000000..9dfc895 --- /dev/null +++ b/DesignPattern/Builder/Program.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder +{ + /* + * 카테고리: 생성패턴 + * 개요: 주로 복잡한 객체를 생성할 때 필요한 여러 스텝 또는 기능을 정의하고 + * Director라는 또 다른 클래스에서 이러한 Builder의 여러 스텝 또는 기능들을 + * 필요에 따라 선택하여 Build 하게 함 + */ + class Program + { + static void Main(string[] args) + { + Client.HowToTest(); + Console.ReadKey(); + } + } +} diff --git a/DesignPattern/Builder/Properties/AssemblyInfo.cs b/DesignPattern/Builder/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7ab589a --- /dev/null +++ b/DesignPattern/Builder/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 +// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 +// 이러한 특성 값을 변경하세요. +[assembly: AssemblyTitle("Builder")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Builder")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 +// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 +// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. +[assembly: ComVisible(false)] + +// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. +[assembly: Guid("01181f37-48b4-4c0b-be41-f8693c8b9e81")] + +// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다. +// +// 주 버전 +// 부 버전 +// 빌드 번호 +// 수정 버전 +// +// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를 +// 기본값으로 할 수 있습니다. +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/DesignPattern/Builder/Simons.cs b/DesignPattern/Builder/Simons.cs new file mode 100644 index 0000000..bddcedd --- /dev/null +++ b/DesignPattern/Builder/Simons.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Builder +{ + /*Concrete Builder*/ + public class Simons : IBedBuilder + { + private Bed _bed = new Bed(); + private int pillowSize = 0; + private string sheetName; + + public Bed Build() + { + _bed.Pillow = $"Pillow Size#{pillowSize}"; + _bed.Sheet = $"Sheet {sheetName}"; + + return _bed; + } + + public IBedBuilder MakeFrame() + { + _bed.Frame = (DateTime.Now.Month > 5 && DateTime.Now.Month < 9) ? + "Simons Summer Frame" : + "Simons Wood Frame"; + + return this; + } + + public IBedBuilder MakeMattress() + { + _bed.Mattress = "Simons Mattress"; + + return this; + } + + public IBedBuilder MakePillow(int size) + { + pillowSize = size; + + return this; + } + + public IBedBuilder MakeSheet(string sheet) + { + sheetName = sheet; + + return this; + } + } +} diff --git a/DesignPattern/DesignPattern.sln b/DesignPattern/DesignPattern.sln index 8c8f448..5750b17 100644 --- a/DesignPattern/DesignPattern.sln +++ b/DesignPattern/DesignPattern.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 16.0.32630.194 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Singleton", "Singleton\Singleton.csproj", "{37FE4D0C-A213-4EA5-B3EF-DB2DB3971ACE}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Builder", "Builder\Builder.csproj", "{01181F37-48B4-4C0B-BE41-F8693C8B9E81}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {37FE4D0C-A213-4EA5-B3EF-DB2DB3971ACE}.Debug|Any CPU.Build.0 = Debug|Any CPU {37FE4D0C-A213-4EA5-B3EF-DB2DB3971ACE}.Release|Any CPU.ActiveCfg = Release|Any CPU {37FE4D0C-A213-4EA5-B3EF-DB2DB3971ACE}.Release|Any CPU.Build.0 = Release|Any CPU + {01181F37-48B4-4C0B-BE41-F8693C8B9E81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01181F37-48B4-4C0B-BE41-F8693C8B9E81}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01181F37-48B4-4C0B-BE41-F8693C8B9E81}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01181F37-48B4-4C0B-BE41-F8693C8B9E81}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE