7. 가교 패턴
Bridge.zip
"본문 내용"은 언제나 휴일 본 사이트에 있습니다.
▶ IImageProcessing.cs
namespace Bridge { interface IImageProcessing { string ImageProcessing(string subject); } } |
▶ VRModule.cs
namespace Bridge { class VRModule:IImageProcessing { public string ImageProcessing(string subject) //약속한 기능 구현 { return subject.Replace("떨림",""); } } |
▶ PCModule.cs
namespace Bridge { class PCModule:IImageProcessing { public string ImageProcessing(string subject) //약속한 기능 구현 { return subject.Replace("0", "1"); } } } |
▶ Lens.cs
using System.Collections.Generic; namespace Bridge { abstract class Lens { const int min_focuslevel=1; const int max_focuslevel=3; public int FocusLevel { get; private set; } public int ModuleIndex { get; private set; } List<IImageProcessing> modules = new List<IImageProcessing>(); //피사체를 얻어와 영성처리하여 사진으로 변환하는 메서드 약속 public abstract string Take(string subject, int distance); public int ModuleCount { get { return modules.Count; } }
public Lens() { FocusLevel = min_focuslevel; ModuleIndex = -1; }
public void AddModule(IImageProcessing module) { modules.Add(module); // 실제 영상 처리를 하는 모듈 장착 }
//장착된 영상 처리 모듈을 이용하여 영상 처리를 하는 메서드 protected string ImageProcessing(string subject,int index) { if((index>=0)||(index<ModuleCount)) { IImageProcessing module = modules[index]; subject = module.ImageProcessing(subject); } return subject; } public virtual void FocusUp() { if(FocusLevel < max_focuslevel) { FocusLevel++; } } public virtual void FocusDown() { if(FocusLevel > min_focuslevel) { FocusLevel--; } }
protected string MakePicture(string subject,int distance) { string s = distance.ToString(); return subject.Replace(s,"선명"); } //영상 처리에 사용할 모듈을 선택하는 메서드 public void SetModuleIndex(int index) { if((index >=0 )&&(index<ModuleCount)) { ModuleIndex = index; } } } } |
▶ AFLens.cs
namespace Bridge { class AFLens:Lens { public override string Take(string subject, int distance) { AutoFocusing(distance); subject = Processing(subject); return MakePicture(subject,distance); }
void AutoFocusing(int distance) { //먼 거리에 있을 때 줌 레벨을 높인다. while (distance > FocusLevel) { FocusUp(); }
//가까운 거리에 있을 때 줌 레벨을 낮춘다. while(distance<FocusLevel) { FocusDown(); } }
string Processing(string subject) { int mcount = ModuleCount;
//내부에 장착된 모듈들을 이용하여 영상 처리 for(int i =0; i<mcount; i++) { subject = ImageProcessing(subject,i); } return subject; } } } |
▶ MFLens.cs
using System; namespace Bridge { class MFLens:Lens { public override string Take(string subject, int distance) { int mindex = ModuleIndex; int mcount = ModuleCount; if((mindex>=0)&&(mindex<mcount)) { subject = ImageProcessing(subject,mindex); } return MakePicture(subject, FocusLevel); } public override void FocusUp() { base.FocusUp(); Console.WriteLine("현재 FocusLevel:{0}",FocusLevel); } public override void FocusDown() { base.FocusDown(); Console.WriteLine("현재 FocusLevel:{0}",FocusLevel); } } } |
▶ Camera.cs
using System; namespace Bridge { class Camera { Lens lens = null; public int ModuleCount { get { if( lens!=null ) { return lens.ModuleCount; } return -1; } }
public void SetModuleIndex(int index) { if(lens!=null) { lens.SetModuleIndex(index); } }
public void PutInLens(Lens lens) { this.lens = lens; } public void TakeAPicture(string subject,int distance) { Console.WriteLine("피사체:{0}",subject); string picture = "■"; if(lens!=null) { picture = lens.Take(subject,distance); } Console.WriteLine("사진:{0}",picture); } public void FocusUp() { if(lens!=null) { lens.FocusUp(); } } public void FocusDown() { if(lens!=null) { lens.FocusDown(); } } } } |
▶ Program.cs
using System;
namespace Bridge { class Program { static void Main(string[] args) { Camera camera = new Camera(); TestAFVRPCLens(camera); TestMFVRLens(camera); }
static void TestAFVRPCLens(Camera camera) { Console.WriteLine("AFVRPCLens 테스트"); VRModule vr = new VRModule(); PCModule pc = new PCModule(); Lens lens = new AFLens(); lens.AddModule(vr); lens.AddModule(pc); camera.PutInLens(lens); camera.TakeAPicture("잎사귀떨림(0) 사람떨림(1) 건물(2) 산(3)", 1); } static void TestMFVRLens(Camera camera) { Console.WriteLine("MFVRLens 테스트"); IImageProcessing module = new VRModule(); Lens lens = new MFLens(); lens.AddModule(module); camera.PutInLens(lens); camera.TakeAPicture("잎사귀떨림(0) 사람떨림(1) 건물(2) 산(3)", 1); camera.FocusUp(); camera.TakeAPicture("잎사귀떨림(0) 사람떨림(1) 건물(2) 산(3)", 1); camera.FocusDown(); camera.SetModuleIndex(0); camera.TakeAPicture("잎사귀떨림(0) 사람떨림(1) 건물(2) 산(3)", 1); } } } |
'.NET > 설계 패턴(C#)' 카테고리의 다른 글
[설계 패턴 C#] 9. 장식자 패턴 (0) | 2016.06.09 |
---|---|
[설계 패턴 C#] 8. 복합체 패턴 (0) | 2016.06.09 |
[설계 패턴 C#] 6. 적응자 패턴 (0) | 2016.06.09 |
[설계 패턴 C#] 단일체 패턴(Singleton Pattern) (0) | 2016.04.17 |
[설계 패턴 C#] 원형 패턴(Prototype Pattern) (0) | 2016.04.17 |