C# 75

[GoF]21.감시자 패턴(Observer Pattern)

1.정의 -하나의 객체가 여러 객체의 상태변화를 감지하게 하는 패턴. -특정 개체의 상태가 바뀌었을 때 반영해야 하는 개체가 여러 개 일 때 감시자 역할을 하는 객체를 두어 변화가 생길 때마다 알려주는 역할을 하게 한다. -감시자 객체가 주 개체에게 등록하는 것을 구독이라 하며 변화가 생길 때마다 알려주는 것을 게시라고 한다. 2.다이어 그램 -IUpdate인터페이스는 감시자 객체들의 기능을 약속하는 인터페이스. -SaturationViewer,BrightnessViewer,ToneViewer 클래스 감시자 객체들로 인터페이스의 기능을 실질적으로 구현한다. -Subject는 추상클래스로 감시자가 구독하는 하는 객체의 추상클래스로 감시자 객체들을 구독과 헤제하는 기능을 가지고 감시자 객체의 상태 변경을 통..

[GoF]20.메멘토 패턴(Memento Pattern)

1.정의 -메멘토 패턴은 객체의 상태 정보를 저장하고 사용자의 필요에 의하여 원하는 시점의 데이터를 복원 할 수 있는 패턴. 2.다이어그램 -Picture클래스는 메멘토 패턴에서의 원복 객체로 여러 속성 값을 가지고 변화키시는 메서드를 가진다. -SnapShot 클래스는 원본 객체의 값을 저장하는 Picture클래스의 정보를 저장한다. -App클래스는 사용자와 소통하는 인터페이스 객체이다. 3.구현 1)SnatShot 클래스 2)PIcuture클래스 3)App클래스 4)테스트

[GoF]19. 중재자 패턴(Mediator Pattern)

1.정의 -중재자 패턴은 프로그램의 상호작용을 해야 하는 개체들이 서로 복잡하게 관계를 맺고 있을 때 상호작용에 관한 행동을 별도의 형식으로 정의하여 중재하는 개체를 만드는 패턴. -복잡한 상호작용은 결합도가 강해지고 유연성이 떨어져서 재사용하기 힘들 경우가 발생 할 수 있다. -중재자 패턴를 통해 부분적으로만 결합도를 유지하여 유연성과 재사용성을 높인다. 2.다이어그램 -Camera 클래스는 사용자와 상호작용하는 객체로 입력값을 받아 기능을 작동시킨다. -IChange 인터페이스는 중재자 객체의 인터페이스로 기능을 약속한다. -InnerMediator클래스는 중재자 객체로 약속한 기능을 실질적으로 구현한다. -InnerModule 클래스는 내부 기능을 약속하는 추상클래스이다. -Iris클래스(조리개 기..

[GoF]18. 반복자 패턴(Iterator Pattern)

1.정의 접근기능과 자료구조를 분리시켜서 객체화하는 패턴. 컬렉션의 내부를 노출하지 않으면서 데이터를 순회하는 객체를 제공한다. 2.다이어 그램 -IContainer 인터페이스는 추상된 컬렉션으로 보관하는 메서드와 삭제, 전체 해제, 현재 보관된 수를 얻어오는 속성을 약속한다. -Arr클래스는 IContainer를 받아 기능을 실질적 구현한다. - IIterator인터페이스는 컬렉션 속성에 포함되어 컬렉션을 순회하기 전에 사용하는 메서드와 다음 위치로 변경하는 메서드, 현재 위치의 보관된 것을 얻어오는 속성을 약속한다. -ArrIterator클래스는 Iiterator를 받아 실질적 기능을 구현하고 Arr클래스의 내부에서 구현되어진다. -Tracer 클래스는 간단한 테스트 객체. 3.구현 1)IContai..

[GoF]17.해석자 패턴(Interpreter Pattern)

1.정의 해석자 패턴은 사용자가 표현하기 쉬운 표현을 사용하게 하고 이를 해석하는 개체를 통해 약속된 알고리즘을 수행하는 패턴. 하지만 해석자 패턴은 사용자의 편의성을 도모해야하고 너무 많은 명령어 조합은 많은 비용을 초래할 수 있다. 2.다이어그램 -Picture 클래스 사진의 정보(변수)를 가지고 매개변수를 받아 변수를 변화시키고 정보를 보는 메서드를 가지고 있다. - Expression 추상클래스는 입력 값을 받아 해석하고 사진을 수정하는 기능을 약속한다. -ToneExpression,BrightnessExpression,SaturationExpression는 입력값을 받아 해석하는 기능과 사진을 정보를 수정시키는 매서드를 재정의 한다. -macro 클래스는 Expression의 파생클래스을 연결리..

[GoF]16.명령 패턴(Command Pattern)

1.정의 -명령을 객체화 하여 재사용성 및 유지보수를 용이하게 하는 패턴. 2.다이어그램 -UIPart 클래스는 구체적인 행위를 생성하여 PictureManager에게 전달한다. -Picture클래스 사진의 정보를 가지고 있는 객체 -PictureManager 클래스는 사진 리스트를 관리하는 객체로 사진을 추가하는 기능 및 사용자의 명령을 모든 사진에 적용하는 기능을 가진다. -IExecute 인터페이스는 사용자가 사용할 명령을 약속한다. - ViewVerifyPicture와 ViewPicture클레스는 IExecute 인터페이스를 가지고 명령을 정의한다. 3.구현 1)Picture클래스 2)IExecute 인터페이스 와 파생클래스 3)PictureManager 클래스 4)UIPart 클래스 5)테스트

[GoF]15.책임 연쇄 패턴(Chain of Responsibility Pattern)

1.정의 -메시지를 받아야 할 곳이 여러 개면 처리해야할 개체의 위치를 찾기 어려움이 있다. -메시지를 관리하는 개체나 계층화 되있다면 효과적으로 메시지을 전달할 수 있다. -책임 연쇄 패턴은 메서지를 전달하는 객체들의 집합체 또는 객체들간에 연결된 계층화를 구현 함으로써 메시지 전달을 효율적으로 할 수있는 패턴이다. 2.다이어 그램 -UIpart클래스는 명령을 요청하는 객체. - ChangeHandler 클래스 명령을 수행하는 객체들의 추상클래스로 명령을 받아들이고 수행하는 메서드를 약속한다. -GrayChangeHandler,RedEyeChangeHandler,SoftChangeHandler 는 받은 명령을 처리하기위한 메서드를 재정의한다. 4.구현 1)ChangeHandler클래스 2)ChangeH..

[GoF]14.보호용 프록시 패턴(Proxy Pattern)

1.정의 - 프록시 패턴은 사용하는 개체를 통해 실제 개체를 제어하는 패턴. -보호용 프록시는 사용자가 실제 개체의 특정 행위를 수행할 수 있는 권한을 부여하여 통제하는 패턴. 2.시나리오 -가족들은 TV를 시청하다 사생활 보호에 대한 이야기가 나왔다. -나눴던 이야기를 바탕으로 사진 관리 응용에 적용하여 접근 할 수 있는 사용자를 지정할 수 있는 프로그램을 짰다. 3.다이어그램 -IView인터페이스는 ProtectionPicture 와 Picture 클래스의 기능을 약속하는 인터페이스로 -PictureManager클래스는 사용자에 의해 IView객체들을 관리하는 클래스. - ProtectionPicture 와 Picture 클래스는 인터페이스로 약속한 기능을 가지고 ProtectionPicture 는 ..

[GoF]13.가상 프록시 패턴(Proxy Pattern)

1.정의 - 프록시 패턴은 사용하는 개체를 통해 실제 개체를 제어하는 패턴. -가상 프록시는 실제 개체의 특정 행위를 수행하는 비용이 클 때 사용하는 패턴으로 가상 프락시는 이 작업을 별도의 스레드로 관리하여 작업 요청을 할 시 수행이 완료될 때까지 기다리지 않고 다른 작업을 수행 할 수 있다. 2.시나리오 -가족은 여수에 다녀온 이후 찍은 사진들을 소셜 사이트에 올리기 위해 사진 보정 작업을 실시 하였다. -하지만 사진들의 크기가 커서 하나의 사진의 사이즈를 조절하는 프로그램을 돌리고 있는 동안은 다른 작업을 실시하지 못했다. => 비용이 큰 작업 -별도의 도우미 프로그램을 작성하여 작업의 시작과 완료를 담당하도록 만들었다. => 프록시 객체 3.다이어 그램 -IConvert는 ImageConverte..

[GoF]12.원격 프록시 패턴(Proxy Pattern)

1.정의 - 프록시 패턴은 사용하는 개체를 통해 실제 개체를 제어하는 패턴. - 원격지 프록시는 사용할 실제 개체가 클라이언트와 다른 위치에 있을 때 원격지에 있는 개체처럼 사용할 수 있는 프록시를 말한다. 2.시나리오 -가족들은 이번에는 여수에 여행을 왔다. -사진을 찍는데 직접 손으로 셔터를 누르는 법보단 원격 리모컨을 사용하는 방식이 편할 것 같았다. 3.다이어 그램 -위의 다이어그램은 소켓 통신을 통한 서버측과 클라이언트로 구분하였다. -서버측은 Camera 객체와 클라이언트 연결을 기다리는 ListenSever 객체와 실제 소켓 통신을 수행하여 카메라를 제어하는 Stub 객체가 있다. -클라이언트 측은 서버측에 있는 카메라를 제어하고 소켓통신을 하는 RemoteController가 있다. -Ca..