4. 원형 패턴(Prototype Pattern)
"본문 내용"은 언제나 휴일 본 사이트에 있습니다.
▶ZoomLens.cs
using System; namespace Prototype { class ZoomLens:ICloneable //복제 가능한 클래스 { readonly int min_zoomlevel; readonly int max_zoomlevel; int zoomlevel; readonly int min_focus; readonly int max_focus; int focus;
public ZoomLens(int min_zlevel, int max_zlevel, int min_focus, int max_focus) { this.min_zoomlevel=min_zlevel; this.max_zoomlevel=max_zlevel; this.min_focus=min_focus; this.max_focus=max_focus; zoomlevel = min_zlevel; focus = min_focus; }
public void Take() { Console.WriteLine("줌 레벨 가능 범위:{0}~{1}", min_zoomlevel,max_zoomlevel); Console.WriteLine("현재 줌레벨:{0}",zoomlevel); Console.WriteLine("포커스 조절 범위:{0}~{1}",min_focus,max_focus); Console.WriteLine("현재 포커스:{0}",focus); }
public int ZoomIn() { if(zoomlevel<max_zoomlevel) { zoomlevel++; } return zoomlevel; }
public int ZoomOut() { if(zoomlevel>min_zoomlevel) { zoomlevel--; } return zoomlevel; }
public int NearFocus() { if(focus>min_focus) { focus--; } return focus; } public int FarFocus() { if(focus<max_focus) { focus++; } return focus; }
public object Clone()//자신을 복제한 개체를 반환하는 메서드 { return new ZoomLens(min_zoomlevel, max_zoomlevel, min_focus, max_focus); } } } |
▶ProLine.cs
namespace Prototype { enum TypeZoomLens{ NM_NM, NM_NF, NF_NF, MF_NF, MF_MF } class ProLine { ZoomLens pt = null; public ProLine(TypeZoomLens typezoomlens) { switch (typezoomlens) { case TypeZoomLens.NM_NM: pt = new ZoomLens(20, 70, 1, 100); break; case TypeZoomLens.NM_NF: pt = new ZoomLens(20, 70, 1, 200); break; case TypeZoomLens.NF_NF: pt = new ZoomLens(20, 300, 1, 200); break; case TypeZoomLens.MF_NF: pt = new ZoomLens(70, 300, 1, 200); break; case TypeZoomLens.MF_MF: pt = new ZoomLens(70, 300, 10, 200); break; default: pt = new ZoomLens(20, 70, 1, 100); break; } } public ZoomLens MakeLens() // 주문한 렌즈를 복제하여 생산하는 메서드 { return pt.Clone() as ZoomLens; } } } |
▶LensFactory.cs
using System.Collections.Generic; namespace Prototype { class LensFactory { List<ProLine> lines = new List<ProLine>(); public int GetMaxLines() { return lines.Count; } public LensFactory() { lines.Add(new ProLine( TypeZoomLens.NM_NM)); lines.Add(new ProLine( TypeZoomLens.NM_NF)); lines.Add(new ProLine( TypeZoomLens.NF_NF)); lines.Add(new ProLine( TypeZoomLens.MF_NF)); lines.Add(new ProLine(TypeZoomLens.MF_MF)); } public ZoomLens Order(int index) //소비자가 주문한 렌즈를 생산 { if ((index >= 0) && (index < lines.Count)) { ProLine pline = lines[index]; return pline.MakeLens(); } return null; } } } |
▶Program.cs
using System; namespace Prototype { class Program { static void Main(string[] args) { LensFactory factory = new LensFactory(); int lcnt = factory.GetMaxLines(); ZoomLens lens = null;
for(int i = 0; i<lcnt; i++) { lens = factory.Order(i); if( lens != null ) { lens.Take(); Console.WriteLine(lens); } } } } } |
▶실행 결과
줌 레벨 가능 범위:20~70 현재 줌레벨:20 포커스 조절 범위:1~100 현재 포커스:1
줌 레벨 가능 범위:20~70 현재 줌레벨:20 포커스 조절 범위:1~100 현재 포커스:1
줌 레벨 가능 범위:20~70 현재 줌레벨:20 포커스 조절 범위:1~100 현재 포커스:1
줌 레벨 가능 범위:20~70 현재 줌레벨:20 포커스 조절 범위:1~100 현재 포커스:1
줌 레벨 가능 범위:20~70 현재 줌레벨:20 포커스 조절 범위:1~100 현재 포커스:1
|
'.NET > 설계 패턴(C#)' 카테고리의 다른 글
[설계 패턴 C#] 6. 적응자 패턴 (0) | 2016.06.09 |
---|---|
[설계 패턴 C#] 단일체 패턴(Singleton Pattern) (0) | 2016.04.17 |
[설계 패턴 C#] 팩토리 메서드 패턴(Factory Method Pattern) (0) | 2016.04.17 |
[설계 패턴 C#] 빌더 패턴(Builder Pattern) (0) | 2016.04.17 |
[설계 패턴 C#] 추상 팩토리 패턴 (Abstract Factory Pattern) (0) | 2016.04.17 |