다양한 디자인 패턴에 대한 간략한 소개

디자인 패턴의 여섯 개 원칙

  • 단일 책임 원칙
  • 리히터 대체 원칙
  • 의존 관계 역전 원칙
  • 인터페이스 독방 원리
  • 드미트리 원리
  • 개방 - 폐쇄 원칙

디자인 패턴의 분류

스키마 만들기

스키마를 만들기 : 추상 개체 개체가 시스템, 기타 정보의 조합으로 생성하는 방법을 캡슐화하는 추상 클래스에 의해 정의 된 인터페이스를 사용하여 인스턴스화. 그것은 다음과 같은 디자인 패턴을 포함

추상 팩토리 패턴

이점
  • 고립 된 특정 클래스
  • 제품 라인을 변환 쉽게
  • 제품 간의 일관성을 향상
결점
  • 새 제품 계층 구조를 지원하기 어려움
  • 원래 추상 팩토리 인터페이스를 확장하는 새로운 제품 계층 구조 지원
적용 현장
  • 시스템은 제품의 생성, 조성물 및 표현과 무관
  • 이 시스템은 여러 제품의 시리즈로 구성되어 있습니다
  • 나는 개체의 공동 사용을 용이하게하기위한 관련 제품의 일련을 강조하고 싶을 때
  • 제품 클래스 라이브러리는, 오히려 자신의 인터페이스를 표시 할 때 경우에 실현보다
적용 사례

당신은 시스템이 변경된 텍스트 상자, 배경 색상 등과 함께 대체 인터페이스 테마, 버튼, 인터페이스 요구 사항,해야 많은 소프트웨어에 추상 팩토리 패턴 디자인 시간을 사용할 수 있습니다

빌더 모드

이점
  • 제품의 내부 표현을 독립적으로 변화 할 수있다
  • 제품 구성의 내부 세부 사항을 알 필요 클라이언트를 일으킬 수있는 코드 상 분리를 나타내는 건축 코드
결점
  • 빌더 모드로 만든 제품은 일반적으로 더 많은 공통점을 가지고, 그 구성 요소는 유사하다면 좋은 제품의 차이. 건설 모드는 적합하지 않습니다
  • 제품의 복잡성의 내부 변경이 변경을 구현하는 구체적인 빌더 클래스를 정의 할 필요가 많이 발생할 수 있습니다 경우, 시스템 매우 커질 수있는 원인
적용 현장

복잡한 객체에게 그것의 수집 및 방식의 독립적 인 알고리즘을 작성 객체의 구성의이 부분
건설 과정은 객체의 다른 표현이 건설 한 허용해야

적용 사례

하늘지도, 지상 배경의 일부 등 인간의 몸, 의류, 장비의 일부를 포함하는 문자를 포함하여 많은 게임 소프트웨어에서 서로 다른 특정 빌더 나와지도의 다른 유형을 생성 빌더 패턴의 디자인을 사용할 수 있습니다 그림

공장 방법 패턴

객체 (제품) 인터페이스를 만들기위한 정의, 서브 클래스는 그 클래스의 객체를 (제품) 인스턴스화

이점
  • 응용 프로그램 코드를 결합 할 필요가 없습니다 만 인터페이스를 처리하는 코드는, 모든 타입의 인터페이스를 사용하여 구현 될 수있다
  • 서브 클래스는 객체의 확장 버전을 제공 허용
  • 데메테르의 법칙, 의존 관계 역전 원칙, 리히터 대체 원칙에 부합
결점
  • 응용 프로그램 모델이 아니라, 존재 작성자 서브 클래스를 필요로하거나, 클래스 계층 구조를 추가해야 않는 경우 창조주와, 캐리어 공장 방법으로 대응하는 서브 클래스를 필요
적용 현장
  • 클래스가 그 제품을 만든 것에 대한 세부 사항을 알고하지 않는 경우 때 서브 클래스 그
  • 당신이 희망의 객체를 생성 할 때 서브 클래스 될 수있는 과정을 지연하기
  • 클래스의 서브 클래스는 그를 지정된 개체를 만들려면

    적용 사례

    MFC와 윈도우의 COM 구성 요소

    프로토 타입 모드

    객체의 유형을 만들 위치를 지정하고 그에 의해 새로운 객체를 생성하기 위해 프로토 타입으로 기존 개체의 프로토 타입을 복사하여 새로운 객체를 생성

    이점
  • 추가하거나 허용하는 경우 제품을 삭제할 수 있습니다
  • 프로토 모드 만든 단순한 구조를 제공한다
  • 응용 프로그램은 새로운 소프트웨어 기능을로드 할 수있는 능력을 가지고
  • 이런 제품은 어떤 구현 계층 구조에 의해 결정 될 필요는 없다

결점

각 유형은 복제 방법에 설치되어 있어야합니다

적용 현장
  • 런타임시, 클래스의 인스턴스는, 예를 들어, 동적 로딩, 유사한 제품 공산주의 클래스 계층 구조와 클래스 계층 구조를 구축 방지하기 위해 지정해야
  • 클래스는 몇 가지 다른 상태의 조합의 유일한 예입니다 때

    싱글

    클래스의 한 인스턴스 만

    이점
  • 의 단일 인스턴스에 대한 액세스를 제어함으로써
  • 네임 스페이스 감소
  • 개선 된 동작을 허용 및 나타낸다
  • 가변 수 있도록 예
  • 조작의 종류보다 더 유연

결점

확장 된 싱글 톤 클래스는, 어느 정도 단일 책임의 원칙에 반하는 매우 어렵고 무거운 의무이다

적용 현장

클래스의 단 하나 개의 인스턴스

적용 사례

점차적으로 발전기

구조 모델

주로 통합 외부 또는 시도하는 새로운 기능을 제공하는 인터페이스를 구현 상속 메커니즘의 조합을 사용하여 더 큰 구조를 얻기 위해 기존의 클래스와 개체를 결합하는 방법에 대한

어댑터 모드

클라이언트가 기대하는 다른 인터페이스로 클래스의 인터페이스를 변환 어댑터 패턴은 원래의 인터페이스가 호환되지 않습니다 그 클래스가 함께 일할 수 작동하지 않을 수 있습니다

이점
  • 두 개 이상의 호환되지 않는 개체가 상호 작용과 의사 소통을 할 수 있습니다
  • 해당 반복의 기존 기능을 개선
  • 클래스의 투명도를 증가
  • 유연성
결점

너무 시스템에 적합한 어댑터가 매우 지저분하게됩니다 많은 전체를 파악하기 어려운

적용 현장
  • 기존의 클래스를 사용하려면 클래스 인터페이스와 인터페이스가 일치 할 필요는 없습니다
  • 재사용 가능한 클래스를 만들려면,이 클래스는 관련이 없거나 알 수없는 클래스 사이의 호환 인터페이스에는 클래스를 도울 수
  • 환경에 인터페이스 대상을 다시 사용하는 것은 공지 된 상이
  • 인터페이스는 소스의 복수 사이에서 변환해야하는 경우
적용 사례

달성 된 무거운 닷넷 클래스 라이브러리에서는 중요한 어댑터 --data 어댑터입니다

브리지 모드

두 개의 별도의 그러나 관련된 상속 계층 내로 부성분

이점
  • 인터페이스는 상분리로 구현 될 수도
  • 향상된 확장 성
  • 클라이언트 숨기기 구현 세부 사항

    결점
  • 이해의 어려움을 증가하고 시스템을 설계
  • 정상적으로 두 개의 중량 변화 측정을 식별하고, 따라서 시스템은 그 사용에는 특정 제한을 가진다

적용 현장
  • 우리는 추상화와 그 구현 사이에 영구적 인 결합이 존재하지 않도록 할
  • 그것의 구현은 확장 추상 서브 클래스를 사용할 수 있습니다
  • 추상 달성 변경은 클라이언트에 영향을 미치지 않습니다

결합 모드

계층 구조 - 트리 구조로 개체는 "전체 부분"을 대표하는

이점
  • 객체 계층 구조의 전부 또는 일부를 나타내는 복잡한 객체의 명확하게 정의 된 계층 구조
  • 이러한 것을 쉽게의 새로운 멤버를 추가
  • 인터페이스의 유연성과 관리 구조를 개선
결점

디자인은 더 추상적된다. 비즈니스 규칙은 모드의 조합으로 이루어진다 복잡한 객체 인 경우 매우 도전이지만, 오브젝트와 연관된 모든 메소드는 서브 클래스를 잎하지

적용 현장
  • 나는 개체의 일부를드립니다 - 전체 계층 구조를
  • 다른 사용자가 하나의 객체와 객체의 조합을 무시하려면, 사용자는 모든 무거운 물체의 통합 구조의 조합을 사용합니다
  • 복잡한 구조의 모든 레벨을 가지고 있지만, 동적 수도

    적용 사례

    관리 섹션, 트리 메뉴, 파일, 폴더와 전체 장면

장식 패턴

몇 가지 추가적인 책임을 동적 객체를 추가, 향상된 기능은 장식 서브 클래스보다 더 유연

이점
  • 정적 상속보다 큰 유연성
  • 코드를 단순화
  • 향상된 확장 성 개체, 사용자는 새로운 클래스를 작성하여 변경할 수 있습니다
  • 장식 및 장식 서로 결합되지 않고, 독자적으로 개발 될 수있다
결점

다층 장식 복잡

적용 현장
  • 단일 객체에서 당신은 역동적이고 투명 책임을 추가 할 수 있지만, 다른 객체에 영향을 미치지 않습니다
  • 가능성이 나중에 목표 체중 수정되고 싶어 책임을 추가
  • 그들은 정적 서브 클래스의 확장을 통해 달성 할 수없는 경우

Facade 패턴

서브 시스템 인터페이스 가중치의 세트에 동일한 인터페이스를 제공하는 외부 시스템 및 서브 시스템, 예컨대 서브 시스템 간의 복잡한 상호 작용의 분리 복잡한 고레벨 인터페이스 모드의 외관 쉽게 사용할

이점
  • 옵션은 시스템에 의해 제공되고, 복잡한 시스템에 간단한 인터페이스를 제공 저하없이
  • 클라이언트 서브 시스템의 방패 어셈블리
  • 서브 시스템과 고객 사이의 약한 결합을 향상
  • 클라이언트 요청 처리 서브 시스템이 전달되면 이러한 요청이 될 수 있습니다
결점
  • 고객 액세스 서브 시스템이 너무 많은 제한을 할 경우 하위 수준의 고객 제한하지 좋은 사용, 그것은 다양성과 유연성을 감소
  • 새 하위 클래스를 추가, 추상 클래스를 도입하지 않고 외관에서는 개방 및 폐쇄의 원칙에 소스 코드 또는 클라이언트, 반대의 모양을 수정해야 할 수 있습니다
적용 현장
  • 복잡한 서브 시스템에 간단한 인터페이스를 제공하면서
  • 이 클라이언트 사이에 상당한 의존성이 있고 추상 클래스를 구현
  • 서브 시스템 사이에 상호 의존적 인 경우 계층 구조 서브 시스템을 구축 할 때, 서브 시스템의 정의는 각 엔트리 포인트의 외관 패턴을 적용, 당신은 그들 외관을 통해서만 의사 소통을하게 자신의 종속성을 단순화 할 수 있습니다 관계

플라이급

낮은 수준의 공유 객체에 의해 감소 ​​시스템, 상세 오브젝트 수가

이점
  • 개체의 수를 감소시키는 것은 처리 될
  • 객체가 유지 될 수 있다면, 그것은 메모리와 저장 장치를 줄일 수 있습니다
결점
  • 방법에서는 응용 프로그램이 더 복잡하게
  • 외부 개체의 상태 플라이급 플라이급 필요성을 공유 할 수있는 객체 및 상태를 만들기 위해 같은 외부 읽기 작업 시간이 길어질
적용 현장
  • 응용 프로그램은 많은 수의 개체를 사용하여
  • 높아 스토리지 오버 헤드 결과 개체 다수 행
  • 프로그램은 개체의 ID에 의존하지 않는다

프록시 모드

원래의 객체에 대한 액세스를 제어하는 ​​에이전트 또는 플레이스 홀더 객체를 제공한다

이점
  • 원격 프록시 개체가 다른 주소 공간에 위치한다는 사실을 숨길 수 있습니다
  • 경고 작업을 최적화하기 위해 수행 할 수 있습니다

    결점
  • 요청을 처리하는 속도가 느려지
  • 프록시 모드를 구현함으로써 시스템 구현의 복잡성을 증가, 추가 작업이 필요

    적용 현장
  • 다른에서 로컬 주소 공간의 물체를 나타내는 제공하고자하는 경우
  • 당신은 오버 헤드가 매우 큰 객체를 생성해야하는 경우

    적용 사례

    --- 프록시 방화벽 보호 대상에 가까운 악의적 인 사용자를 방지하기 위해

행동 모델

기본 프레임 워크 및 표준 등의 행동의 추상적 인 이론 중 행동을 많이 일반화 클래스 모델은 주로 객체 사이의 책임과 서비스를 할당에 사용, 그는 모델 객체 또는 클래스를 설명뿐만 아니라, 그들은 또한 설명 간의 통신 모드

책임 패턴의 사슬

시스템에서 링크를 설정, 수신 된 메시지는 그의 최초 수준으로 처리 될 수 있거나, 그의 대상을 찾기 위해 처리 될 수있다

이점
  • 분리
  • 객체에 지정된 책임의 유연성을 증가
적용 현장
  • 복수의 오브젝트를 처리 할 수있는 요청하고, 상기 프로세서로 알 수있는
  • 동적으로 지정된 객체가 요청을 처리 할 수있는 설정

명령 모드

객체 요청 캡슐화 및 저장 명령의 방법으로 전달하고 다른 개체는 명령을 반환

이점
  • 기존의 클래스를 수정하지 않고 새 명령을 추가
  • 그리고 작업 대상 객체는 작업 상 분리를 완료하는 방법을 알고
적용 현장
  • 작업을 통해 파라 메트릭 객체에 원하는 수행 할
  • 다른 시간에 지정하고, 실행 요구를 정렬

통역 패턴

구문 정의 언어 표현 설명

이점
  • 쉽게 수정 및 문법을 확장
  • 구문이 용이하다
적용 현장
  • 언어의 문법은 비교적 간단하다
  • 효율성은 주요 문제가되지 않습니다

반복자 패턴

내부 노출 된 물체의 표현을 변경하지 않고 중합체 오브젝트의 각 요소에 순차 접속하는 방법이 제공되며

이점
  • 다른 지원의 수집을 통해
  • 컬렉션 인터페이스 간소화
적용 현장
  • 내부 표시 오브젝트의 집합을 개방하지 않고도 Collection 객체 콘텐츠에 액세스
  • 지원 여러 기호 객체 탐색
  • 그것은 다른 구조의 컬렉션을 통과 할 통일 된 인터페이스를 제공합니다

메멘토 패턴

유지 객체 상태 외부 세계에 그 내용을 공개하지 않고, 원래의 상태로 돌아갑니다 "스냅 샷"

이점
  • 그대로 패키지를 유지하려면
  • 그것은 작업의 초기 상태에 필요한 수익을 단순화
적용 현장
  • 당신은 객체의 스냅 샷을 저장해야합니다
  • 오브젝트가 오브젝트 파괴를 캡슐화하는 곳에 적합한 구현 세부 사항을 얻기 위해 직접 인터페이스 상태에서 개시 될 수있다

옵저버 패턴

그것은받는 구성 요소에 대한 관련 방송 메시지에 대한 유연한 접근 방식을 제공합니다

이점
  • 본체와 관찰자 사이의 추상 커플 링
  • 통신 및 방송 모드 지원

적용 현장

  • 수정은 다른 개체에 개체에 대한 변경 사항을 포함하지만, 수정할 필요가 얼마나 많은 개체를 모른다
  • 객체는 객체 식별자를 설정하지 않고, 다른 오브젝트를 통보 할 수 있어야

주 모드

동작을 변경할 때 내부 상태의 변화와 그 클래스를 수정하는 객체를 허용

이점
  • 상태에 지정된 상태 동작을 포지셔닝하고 따라하는 동작을 분할하기
적용 현장
  • 상태에 따라 동작을 객체와 객체는 런타임에 상태에 따라 동작을 수정해야합니다
  • 그리고 조건문 따라 다수의 운영 다중 상태의 조성물의 일부에

전략 모드

그것은 가능한 일련의 행동을 나타내는 데 사용되는 클래스의 집합을 정의

이점
  • 또 다른 방법 씨앗
  • 클래스 자체의 동작을 정의 조건문을 감소
  • 더 많은 확장 성 모델
적용 현장
  • 많은 관련 클래스는 제도면에서 다를뿐
  • 이 알고리즘은 서로 다른 변종이 필요
  • 알 수없는 알고리즘은 클라이언트 데이터를 사용

템플릿 메소드 패턴

이 서브 클래스는 방법을 많이로드 된 부분없이 메소드를 오버라이드 (override) 할 수 있도록하는 방법을 제공한다

이점
  • 사용 코드
적용 현장
  • 서브 클래스가 알고리즘의 변수 동작을 구현하는 알고리즘의 일정 부분을 달성하고자하는
  • 서브 클래스 사이의 일반적인 동작은 일반 클래스를 찾을 수 코드의 중복을 피하기 위해, 파괴해야

방문자 패턴

그것은 개체의 구조 요소에서 수행 가능한 유지 보수 작업을 대표 할 수있는 편리한 방법을 제공합니다. 모드는 새로운 운영 요소의 운영 클래스를 변경하지 않고 전제 변화의 정의를 허용

이점
  • 새로운 작업을 쉽게 추가 할 수 있습니다
  • 농도 관련 작업 및 제거 관련이없는 작업

    적용 현장
  • 클래스 정의 오브젝트 구조는 거의 변경되지 않는,하지만이 구조에 새로운 작업을 정의 할
  • 다른 인터페이스를 갖는 오브젝트를 복수의 클래스를 포함하는 개체의 구조 및 동작이 클래스의 특정 개체에 의존하고자

중개 모델

객체 간의 메시지들의 분배를 관리 할 수있는 피사체를 도입하여, 목적은 통신 시스템을 간소화

이점
  • 오브젝트 간의 추출 효과
  • 객체 사이의 단순화 된 프로토콜
  • 중앙 집중식 제어
적용 현장
  • 오브젝트 세트를 정의하지만, 복잡한 양방향 통신을 필요로
  • 여러 개체의 행동에 분산 커스텀 서브 클래스를 사용하지 않고 원

블로그 기사 여러 플랫폼에서이 문서 OpenWrite의 출시!

추천

출처www.cnblogs.com/zhendiao/p/11774049.html