C#/GoF 디자인패턴 24

[GoF]24.템플릿 메서드 패턴(Template Method Pattern)

1.정의 -특정 연산을 단계별로 수행하는 행위를 기반 클래스에서 약속하고 단계별로 수행하는 구체적 구현은 파생 클래스에서 재정의하는 형태의 패턴. -프로그램 구현에 필요한 뼈대를 일반화하고 세부적인 기능을 재정의하여 설비 단계에서의 비용과 시간을 절감할 수 있다. 2.다이어그램 -EHApp클래스는 프로그램의 기반이 되는 클래스로 초기화,실행,종료, 상호작용를 기능을 약속한다. RUN 메서드는 사용자가 키를 누를 때 반응하여 기능을 실행시킨다. -MyApp클래스는 EHApp클래스를 상속받아 기능을 재정의한다. 3.구현 -EHApp구현 -MyApp구현 3.테스트

[GoF]23.전략 패턴(Strategy Pattern)

1.정의 -문제해결에 사용하는 여러 알고리즘을 객체화하여 사용할 때마다 알고리즘 객체를 바꿈으로써 문제해결에 있어 보다 나은 유연성을 제공할 수 있는 패턴. 2.다이어그램 -Picture클래스는 사진에 관한 속성을 가지고 있는 객체. -IView 인터페이스는 사진의 정보를 보여주는 View기능을 약속하여 파생 클래스에서 받은 실질적인 기능을 구 -.SimpleViewer,VerifyViewer 클래스 들은 IView 인터페이스에서 약속한 기능을 실질 구현한다. - PictureCollection 클래스 사진 객체들의 리스트를 가지고 IView들의 가지고 현재 Iview를 선택하여 사진의 속성을 보여준다. 3.구현 1.Picture클래스 2.IViewer 인터페이스 3.SimpleViewer,VerifyV..

[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 는 ..