이 섹션에 포함될 수 있습니다 과도한 금액의 복잡한 세부사항할 수 있는 관심만 특히 관객들. 관련 정보를 회전 시키거나 재배치하고 Wikipedia 의 포함 정책에 위배 될 수있는 과도한 세부 사항을 제거하여 도움을주십시오. (월 2020)(는 방법을 배울 때를 제거하는 이 템플릿의 메시지가)

장갑을 통해 일곱해야 합니다 문제를 해결하기 위해서 제대로 디자인 Lexi 포함하여 모든 제약 조건을 따라야 합니다. 각 문제는 심층적으로 분석되고 솔루션이 제안됩니다., 각 솔루션은 의사 코드와 적절한 경우 객체 모델링 기술의 약간 수정 된 버전을 포함하여 전체적으로 설명됩니다.

마지막으로 각 솔루션은 하나 이상의 디자인 패턴과 직접 연결됩니다. 솔루션이 해당 디자인 패턴을 직접 구현하는 방법을 보여줍니다.

일곱제(를 포함하여 그들의 제약)및 그들의 솔루션을(를 포함하여 패턴(s)참조),은 다음과 같습니다:

문서 StructureEdit

이 문서는”배열의 기본적인 그래픽 요소”와 같은 문자,선,다른 모양,etc.,,그”문서의 총 정보 내용을 캡처”(35 쪽). 문서의 구조에는 이러한 요소 모음이 포함되어 있으며 각 요소는 차례로 다른 요소의 하위 구조가 될 수 있습니다.

문제들과 제약

  1. 텍스트와 그래픽을 처리해야 같은 방법으로(즉,그래픽이 아닌 파생 인스턴스의 텍스트,으며 그 반대의 경우에도 마찬가지)
  2. 구현 치료 해야 하는 복잡하고 단순한 구조는 동일한 방법입니다. 이 둘의 차이를 알 필요는 없습니다.,
  3. 추상 요소의 특정 파생물에는 특수화 된 분석 요소가 있어야합니다.

솔루션 및 패턴

재귀적 조성은 계층적 구조물의 요소를 건축하는”점점 더 복잡한 요소들의 간단한 사람”(pp.36). 구조의 각 노드는 자체 자식 및 부모를 알고 있습니다. 전체 구조에서 작업을 수행해야하는 경우 각 노드는 해당 자식(재귀 적으로)에 대한 작업을 호출합니다.이것은 노드 모음 인 복합 패턴의 구현입니다., 노드를 추상적인 기본 클래스와 유도체할 수 있습 잎(단수),거나 컬렉션의 다른 노드(에 포함될 수 있습 잎이나 컬렉션 노드). 부모에서 작업을 수행하면 해당 작업이 재귀 적으로 계층 아래로 전달됩니다.

FormattingEdit

Formatting 은 구조와 다릅니다. 서식 지정은 문서의 물리적 구조의 특정 인스턴스를 구성하는 방법입니다. 여기에는 텍스트를 줄로 나누기,하이픈 사용,여백 너비 조정 등이 포함됩니다.,

문제들과 제약

  1. 사이에 균형을(포맷)품질,속도와 저장 공간
  2. 유 포맷 독립(커플링)문서에서 구조입니다.

솔루션 및 패턴

컴포 등이 캡슐화하는 알고리즘을 사용하는 형식으로 구성. Compositor 는 문서 구조의 원시 객체의 하위 클래스입니다. 컴포지터에는 컴포지션 객체의 관련 인스턴스가 있습니다., 을 때 컴포를 실행하는Compose()이 반복되어 각각의 요소를 통해의 관련성,그리고 다시 정렬 구조를 삽입하여 행과 열의 개체로 필요합니다.

컴포지터 자체는 추상 클래스도록 유도체 클래스를 사용하여 다른 형식 알고리즘(과 같은 두 번 간격,더 넓은 여백,etc.)

이 목표를 달성하기 위해 전략 패턴이 사용됩니다. 전략은 변화하는 컨텍스트를 기반으로 사용할 여러 알고리즘을 캡슐화하는 방법입니다., 이 경우 텍스트,그래픽,간단한 요소 등에 따라 서식이 달라야합니다.,포맷되고 있습니다.

사용자 인터페이스 꾸미기

사용자가 문서와 상호 작용하는 데 사용하는 그래픽 인터페이스를 변경하는 기능.,

문제들과 제약

  1. 구분의 페이지 텍스트로 테두리 주변의 편집 지역
  2. 스크롤 막대가 있는 사용자가 보는 다른 부분의 페이지
  3. 사용자 인터페이스 객체는지에 대해 알고 장식
  4. “을 피하는 것을 폭발 클래스의”하는 것에 의해 발생 하위 클래스를 위한”가능한 모든 조합의 장식”및소(p. 44)

솔루션 및 패턴

의 사용을 투명 케이스할 수 있는 요소가 증가 동작의 조성을 추가할 수 있는 구성입니다., 테두리 및 스크롤러와 같은 이러한 요소는 단수 요소 자체의 특수 하위 클래스입니다. 이를 통해 컴포지션을 보강하여 상태와 같은 요소를 효과적으로 추가 할 수 있습니다. 이러한 보강은 부분의 구조,그들의 적절한Operation()호출 될 때 구조물의Operation()라고 합니다. 즉,클라이언트가 꾸밈음을 사용하기 위해 특별한 지식이나 구조와의 인터페이스가 필요하지 않습니다.,이것은 객체 자체를 수정하지 않고 객체에 책임을 추가하는 데코레이터 패턴입니다.

여러 Look-And-Feel 표준을 지원하는 Sedit

Look-and-feel 은 플랫폼 별 UI 표준을 나타냅니다. 이러한 표준은”응용 프로그램이 사용자에게 어떻게 나타나고 반응하는지에 대한 지침을 정의합니다”(47 쪽).

문제들과 제약

  1. 편집기를 구현해야의 표준을 여러 플랫폼에도록 그것은 휴대용
  2. 쉽게 적응하여 새로운 응급 기준
  3. 허용한 실시간 변화의 모양과 느낌을(즉,:하드 코딩)
  4. 의 집합을 가지고 추상적인 원소의 서브 클래스에 대한 각 카테고리의 요소(스크롤 버튼,etc.)
  5. 설정된 콘크리트의 서브 클래스에 대한 각각의 추상 클래스할 수 있는 다른 모양과 느낌을 표준입니다. (스크롤바를 갖는 MotifScrollBar 및 PresentationScrollBar 에 대한 모티프와 프리젠 테이션의 모양과 느낌이)

솔루션 및 패턴

때문에 객체를 작성하는 다른 구체적인 개체를 수행할 수 없 런타임에 객체를 작성해야하는 과정이 요약되어 있습니다., 이 작업은 UI 요소를 만드는 책임을 맡는 추상 guiFactory 로 수행됩니다. 추상 guiFactory 에는 적절한 유형(MotifScrollBar)의 구체적인 요소를 만드는 MotifFactory 와 같은 구체적인 구현이 있습니다. 이 방법으로 프로그램은 스크롤바를 요청하기 만하면되며 런타임에 올바른 구체적인 요소가 제공됩니다.이것은 추상 팩토리입니다. 일반 공장은 한 가지 유형의 구체적인 물체를 만듭니다. 추상 공장은 공장 자체의 구체적인 구현에 따라 다양한 유형의 구체적인 객체를 만듭니다., 에 초점을 맞추는 그것의 능력을 단지 콘크리트 개체이지만,가족 전체가 콘크리트의 객체를”그것을 구분에서 다른 패턴 생성을 포함하는 단 하나의 제품 종류의 개체”(pp.51).

다중 창 SystemsEdit 지원

룩앤필이 플랫폼마다 다른 것처럼 windows 처리 방법도 마찬가지입니다. 각 플랫폼은 창을 표시하고,배치하고,입력 및 출력을 처리하고,창을 다르게 계층화합니다.,

문제들과 제약

  1. 이 문서를 편집기를 실행해야 합니다에 많은”중요하고 크게 호환되지 않는 윈도우 시스템”존재하는(p. 52)
  2. 는 추상적 공장에 사용할 수 없습니다. 표준이 다르기 때문에 각 유형의 위젯에 대한 일반적인 추상 클래스가 없을 것입니다.
  3. 새로 만들지 마십시오,비표준 윈도우 시스템

솔루션 및 패턴

그것을 개발하는 것이 가능하”우리 자신의 추상적이고 구체적인 제품 종류”는”때문에,모든 시스템은 일반적으로 동일한 것”(p. 52)., 각 창 시스템은 원시 모양 그리기,아이콘 화/아이콘 해제,크기 조정 및 창 내용 새로 고침에 대한 작업을 제공합니다.

반적인Window등 파생될 수 있는 다른 유형의 기존 windows,응용 프로그램과 같은 아이콘,화입니다. 이러한 클래스에는 재구성,그래픽 새로 고침 등과 같은 창과 관련된 작업이 포함됩니다. 각 창의 요소를 포함하고,누구의Draw()함수 호출에 의해Window‘s 의 자신의 그리 관련 기능이 있다.,

가능한 모든 플랫폼에 대해 플랫폼 별 창 하위 클래스를 만들 필요가 없도록 인터페이스가 사용됩니다. Window클래스를 구현하는 것이다Window구현(WindowImp)추상 클래스입니다. 그런 다음이 클래스는 여러 플랫폼 별 구현으로 차례로 파생되며 각 플랫폼 별 작업이 있습니다., 따라서,단 하나의 세트의Window클래스에 필요한 각 유형의Window,단 하나의 세트의WindowImp클래스에 필요한 각 플랫폼(보다는 데카르트의 제품 사용 가능한 모든 유형과 플랫폼). 또한 새 창 유형을 추가하면 플랫폼 구현을 수정하거나 그 반대의 경우도 필요하지 않습니다.이것은 브리지 패턴입니다. WindowWindowImp는 다르지만 관련이 있습니다., Window는 프로그램에서 창 작업을 처리하고WindowImp는 플랫폼에서 창 작업을 처리합니다. 그 중 하나는 다른 하나를 수정하지 않고도 변경할 수 있습니다. 브리지 패턴은이 두 가지”별도의 클래스 계층 구조가 독립적으로 진화하더라도 함께 작동 할 수 있습니다”(54 페이지 참조).

사용자 OperationsEdit

모든 작업은 사용자가 가지고 있을 수 있는 문서에 이르기까지,텍스트 입력용 변경,서식,종료는 저장,,등등.,

문제들과 제약

  1. Operations 를 통해 액세스해야 합 다른 입력,메뉴와 같은 옵션과에 대한 키보드 단축키가 동일한 명령
  2. 각 옵션의 인터페이스를 가지고 있어야 하는 수정할 수 있
  3. 운영이 구현되는 여러 가지 서로 다른 클래스가
  4. 을 방지하기 위해 카플링,이 있어야 하지 않는 많은 간의 종속성을 구현하고 사용자 인터페이스 클래스입니다.,
  5. 취소와 명령을 지원해야에서 대부분의 문서 변화하는 작업이 없이 임의의 수에 대한 제한 수준의 취소
  6. 기능하지 않은 실행 가능한 때문에,그들은하지 않/취소 쉽게 있지 않은 쉽게 연결된 상태이며,하드를 연장하거나 재사용할 수 있습니다.
  7. 메뉴는 계층 적 복합 구조처럼 취급되어야합니다. 따라서 메뉴는 다른 메뉴 항목 등을 포함 할 수있는 메뉴 항목을 포함하는 메뉴 항목입니다.,

솔루션 및 패턴

각 메뉴 항목보다 인스턴스화와 매개 변수 목록은,대신으로 수행 명령 객체입니다.

명령은 하나의 추상Execute()메소드 만있는 추상 객체입니다. 유도체 개체 확장Execute()방법은 적절한(i.e,PasteCommand.Execute()을 활용하는 컨텐츠의 클립보드 버퍼). 이러한 객체는 메뉴 항목에서 사용할 수있는 것처럼 쉽게 위젯이나 버튼에서 사용할 수 있습니다.,

을 지원하는 취소하고 다시 실행,Command또한 주어진Unexecute()Reversible(). 에서 파생 수업,전자는 코드가 포함되어 그 명령을 취소하고,후자는 부울 값을 반환을 정의하는 명령이 취소할. Reversible()는 저장 명령과 같이 일부 명령을 실행 취소 할 수 없습니다.

실행된 모든Commands에 보관하고 있으로 목록을 유지하는 방법에는”존재”마커에 직접 후 가장 최근에 실행된 명령입니다., 요청을 취소화Command.Unexecute()직접기 전에”존재”로 이동한 다음”존재”다시 한 명령입니다. 반대로,Redo요청이 통화Command.Execute()후”선물”이동”존재”앞으로 하나입니다.

Command접근 방식은 명령 패턴의 구현입니다. 객체에 요청을 캡슐화하고 공통 인터페이스를 사용하여 해당 요청에 액세스합니다. 따라서 클라이언트는 다른 요청을 처리 할 수 있으며 명령은 응용 프로그램 전체에 흩어져있을 수 있습니다.,

맞춤법 검사 및 HyphenationEdit

이 문서를 편집기의 능력을 텍스트의 내용을 분석합니다. 수행 할 수있는 많은 분석이 있지만 맞춤법 검사 및 하이픈-서식이 초점입니다.

문제들과 제약

  1. 허용한 여러 가지 방법을 확인 맞춤법 및 확인 장소에 대한 하이픈
  2. 허용을 위한 확장을 위한 미래 분석(예를들면,단어수,문법 확인)
  3. 할 수 있을 반복하여 텍스트의 콘텐츠에 액세스하지 않고 텍스트의 실제 구조물(예:,,array,linked list,string)
  4. 문서의 순회 방식(시작부터 끝,시작부터 끝,알파벳 순서 등)을 허용합니다.)

솔루션 및 패턴

제거 정수 인덱스에서 기본적인 요소를 사용에 대한 다른 반복 인터페이스를 구현할 수 있다. 이를 위해서는 순회 및 객체 검색을위한 추가 메소드가 필요합니다. 이 메소드는 추상Iterator인터페이스에 배치됩니다., 각 요소는 다음를 구현하는 파생의Iterator방법에 따라하는 요소 계속 목록(ArrayIterator,LinkListIterator,등등.).

순회 및 검색을위한 함수는 추상 반복자 인터페이스에 배치됩니다. 미래의 반복자는 배열 또는 링크 된 목록과 같이 반복 될 목록의 유형에 따라 파생 될 수 있습니다. 따라서 요소의 구현이 어떤 유형의 인덱싱 방법을 사용하든 적절한 반복자를 갖게됩니다.이것은 반복자 패턴의 구현입니다., 그것은 클라이언트를 통해 모든 개체 컬렉션에 액세스하지 않고 내용의 컬렉션을 직접,또는 염려되는 유형에 대한 목록의 컬렉션의 구조를 사용합니다.

이제 순회가 처리되었으므로 구조의 요소를 분석 할 수있게되었습니다. 그것은 가능하지 않을 구축하고 각 유형의 분석으로 요소 구조는 자는 모든 요소가 될 필요가 코드,그리고 많은 코드의 것 같은 유사한 요소입니다.

대신 일반CheckMe()메소드가 요소의 추상 클래스에 내장되어 있습니다., 각 반복자에는 특정 알고리즘(예:맞춤법 검사,문법 검사 등)에 대한 참조가 제공됩니다.). 해당 반복자가 컬렉션을 반복 할 때 각 요소의CheckMe를 호출하여 지정된 알고리즘을 전달합니다. CheckMe그런 다음 전달을 참조하는 요소로 다시 말하는 알고리즘에 대한 분석입니다.

따라서 수행하기 위해,주문 확인,프런트-엔드 반복자에게 주어질 것입에 대한 참조는SpellCheck개체입니다., 반복기는 것이 다음 각 요소에 액세스를 실행하는,그것의CheckMe()방법으로는SpellCheck매개 변수입니다. 각CheckMeSpellCheck를 호출하여 해당 요소에 대한 참조를 전달합니다.

이러한 방식으로 모든 알고리즘과 함께 사용할 수 있습 통과 방법이 없이 열심히-코드로 연결 중 하나입니다. 예를 들어,찾으로 사용할 수 있”다음 찾기”또는”찾기 이전의”,경우에 따라”앞으로”반복기를 사용되었거나”뒤로”반복기입니다.,또한 알고리즘 자체가 다른 요소를 다루는 책임을 질 수 있습니다. 예를 들어,SpellCheck알고리즘을 무시하는 것입니다Graphic요소이 아니라 모든 프로그램Graphic-파생된 요소를 보내지는 자신을SpellCheck.피>

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다