정의 : 추상 공장 패턴은 콘크리트 클래스를 지정하지 않고 관련 또는 종속 객체의 패밀리를 만드는 인터페이스를 제공합니다. 이 패턴은 시스템이 제품을 생성, 구성 및 표현하는 방식과 무관해야 할 때 특히 유용합니다.
예제 예 : 다양한 환경 (토지, 바다, 공기)을 나타낼 수있는 시뮬레이션 소프트웨어 개발을 상상해보십시오. 추상 공장 패턴을 사용하여 다양한 유형의 동물과 식물을 생성하는 방법으로 공장 인터페이스를 정의한 다음 각 환경에 대해 서로 다른 콘크리트 공장을 구현할 수 있으며 각 환경에 맞는 물체를 만드는 방법을 알고 있습니다.
정의 : 공장 메소드 패턴은 객체를 생성하기위한 인터페이스를 정의하지만 서브 클래스가 어떤 클래스를 인스턴스화할지 결정할 수 있습니다. 이 패턴은 객체 인스턴스화의 책임을 서브 클래스로 위임하여 느슨한 커플 링을 촉진합니다.
예제 사용 : 문서 관리 응용 프로그램은 공장 메소드를 사용하여 다양한 유형의 문서 (텍스트, 차트, 프레젠테이션)를 만들 수 있습니다. 각 유형의 문서에는 콘크리트 클래스가 있으며 기본 클래스의 공장 메소드는 사용자 입력을 기반으로 작성할 문서를 결정하여 콘크리트 문서 클래스에서 클라이언트 코드를 분리합니다.
정의 : 빌더 패턴은 복잡한 물체의 구조를 표현에서 구분하여 다른 표현에 대한 동일한 구성을 허용합니다. 이 패턴은 객체를 여러 단계로 만들어야 할 때 유용하며 건설 프로세스는 다른 표현에 대해 동일해야합니다.
예제 사용 : 다양한 유형의 자동차 (스포츠, SUV, 컨버터블)를 만들 수있는 자동차 빌더를 고려하십시오. 건축업자를 사용 하여이 자동차의 건축 과정은 다른 단계 (섀시, 엔진, 내부)로 표준화 될 수 있으며 각 자동차 유형의 특정 세부 사항은 다른 콘크리트 빌더를 통해 처리됩니다.
정의 : 책임 패턴의 체인은 핸들러 체인을 따라 요청을 전달할 수 있습니다. 각 핸들러는 요청을 처리 할 것인지 또는 체인의 다음 핸들러로 전달할지 결정합니다.
예제 사용 : HelpDesk 시스템에서 지원 요청은 다양한 수준의 기술 지원을 통과 할 수 있습니다. 각 레벨은 요청을 검사하고 요청을 처리 할 수 있는지 또는 다음 단계로 전달할 수 있는지 결정합니다. 이렇게하면 요청 발신자와 특정 수신기와 결합되지 않으며 다른 객체간에 책임을 배포합니다.
정의 : 명령 패턴은 요청을 동작을 수행하는 데 필요한 모든 정보를 포함하는 독립 객체로 변환합니다. 이를 통해 요청이 다른 요청으로 매개 변수화, 요청 실행을 지연 또는 대기하고 실행 취소 작업을 지원할 수 있습니다.
예제 사용 : 홈 자동화 응용 프로그램에서 조명을 켜거나 끄는 것과 같은 명령 또는 온도 조절기 조정과 같은 명령은 명령 개체에서 캡슐화 될 수 있습니다. 이 명령은 스마트 폰이나 태블릿과 같은 다른 장치에서 보낼 수 있으며 필요에 따라 예약 또는 취소 할 수 있습니다.
정의 : 프로토 타입 패턴을 사용하면 코드를 클래스에 의존하지 않고 기존 객체를 복사 할 수 있습니다. 각 프로토 타입 클래스는 프로토 타입 인터페이스를 구현하여 자체적으로 복제하는 방법을 제공합니다.
예제 사용 : 게임에서, 장면에서 매번 처음부터 객체를 만드는 대신 '프로토 타입'객체를 클로닝하여 동일한 사본을 만들 수 있습니다. 이것은 많은 유사한 객체를 생성하고 파괴하는 것이 성능 집약적 일 수있는 게임 시나리오에서 특히 유용합니다.
정의 : Memento 패턴을 사용하면 내부 구현의 세부 사항을 밝히지 않고 객체의 이전 상태를 저장하고 복원 할 수 있습니다. 이 패턴은 이전 상태로 되돌릴 수있는 능력이 필요한 애플리케이션에서 UNDO와 같은 기능을 구현하는 데 유용합니다.
예제 : 사용자가 텍스트 변경을 취소 할 수있는 텍스트 편집기를 개발하는 것을 상상해보십시오. 상당한 편집이 이루어질 때마다 편집자 상태는 Memento 객체에 저장됩니다. 사용자가 변경 사항을 취소하려면 편집기는 이러한 Memento 객체 중 하나에서 상태를 복원하여 텍스트를 이전 상태로 되돌릴 수 있습니다.
정의 : 중재자 패턴은 연결된 객체 간의 복잡한 통신과 종속성을 중앙 집중화하여 느슨한 커플 링을 촉진하고 객체가 서로 직접 참조하는 것을 방지하는 객체를 정의합니다. 이를 통해 복잡한 상호 작용을 더 잘 처리하고 코드 유지 보수성을 향상시킵니다.
예제 사용 : 항공 교통 관제 응용 프로그램을 고려하십시오. 각 항공기가 다른 모든 항공기가 다른 모든 항공기 (매우 복잡한 시스템 생성)와 직접 통신 할 수 있도록 허용하는 대신 중재자 (이 경우 제어 타워)는 모든 통신을 처리합니다. 항공기는 제어 타워 와만 통신하며, 이는 각 항공기의 조치를 지시합니다.
정의 : 템플릿 메소드 패턴은 메소드에서 알고리즘의 골격을 정의하여 서브 클래스로 실행할 몇 단계를 연기합니다. 이를 통해 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의 할 수 있습니다.
예제 사용 : 자동화 된 테스트 프레임 워크를 생각하십시오. 템플릿 메소드는 표준 테스트 구조를 정의하는 데 사용될 수 있으며, 여기서 템플릿 메소드는 테스트 실행 흐름 (설정, 실행, 정리)을 설정합니다. 그런 다음 특정 테스트 서브 클래스는 테스트 후 설정, 실제 테스트 실행 및 정리 작업을위한 메소드를 구현하여 각 단계를 사용자 정의 할 수 있습니다.
정의 : 관찰자 패턴은 객체 간의 일대일 관계를 설정하여 한 객체가 상태를 변경하면 모든 부양 가족이 자동으로 알리고 업데이트됩니다. 이 패턴은 분산 이벤트 알림 시스템을 구현하는 데 특히 유용하며, 다른 시스템 또는 구성 요소에서 한 상태로의 변경 사항을 실시간으로 반영해야합니다.
예제 사용 : 스마트 빌딩의 기후 관리 시스템을 고려하십시오. 온도 센서 (게시자)는 환경을 지속적으로 모니터링하고 중대한 변화의 경우 에어컨 및 난방 시스템과 같은 다양한 장치 (관찰자)에 업데이트를 전송하여 최적의 온도를 유지하도록 조정합니다. 이런 식으로 기후 제어 시스템은 직접적인 인간의 개입없이 환경 조건에 동적으로 반응하여 편안함과 에너지 효율을 보장 할 수 있습니다.
정의 : 상태 패턴을 통해 객체는 내부 상태가 변경 될 때 동작을 변경할 수 있습니다. 마치 객체가 클래스를 바꾸는 것처럼 보입니다. 이 패턴은 복잡한 상태 변경 상황을 처리하는 데 유용하여 코드 내에서 분기 조건 (IF-ELSE 또는 스위치)의 필요성을 줄입니다.
예제 : 온라인 주문의 수명주기를 관리하기위한 응용 프로그램 개발을 상상해보십시오. 주문은 "처리", "배송", "배달"과 같은 다양한 주에서 이루어질 수 있습니다. 상태 패턴을 사용하여 Process (), Ship () 및 Deliver ()와 같은 메소드를 사용하여 추상 Orderstate 클래스를 정의 할 수 있습니다. 각 콘크리트 상태 (예 : ProcessingState, ShippedState, DeliveredState)는 상태 전환을 적절하게 처리하기위한 이러한 방법을 구현합니다. 컨텍스트 (예 : 주문 클래스)는 현재 상태에 대한 참조를 유지하고 상태 운영을 구체적인 상태 객체로 위임하므로 클라이언트 코드의 직접적인 개입없이 현재 상태에 따라 순서의 동작이 변경 될 수 있습니다.
정의 : 전략 패턴은 알고리즘 패밀리를 정의하고 전용 클래스에서 캡슐화하고 해당 컨텍스트 내에서 물체를 서로 교환 할 수 있도록하는 행동 패턴입니다. 이 접근법을 사용하면이를 사용하는 클라이언트와 독립적으로 다양한 알고리즘을 허용합니다.
예제 사용 : 고객의 국가에 따라 다양한 세금 계산 전략을 구현 해야하는 전자 상거래 응용 프로그램을 상상해보십시오. 전략 패턴을 사용하면 CalculateTax () 방법으로 TaxStrategy 인터페이스를 정의한 다음 UstaxStrategy, eutaxstrategy 및 AsiataxStrategy와 같은 다양한 세금 상황에 대한 다양한 구체적인 전략을 구현할 수 있습니다.
정의 : 반복자 패턴은 기본 표현을 노출시키지 않고 순차적 집계 객체의 요소에 액세스 할 수있는 방법을 제공합니다. 이 패턴은 특히 컬렉션의 다른 트래버스 모드를 관리하는 데 특히 유용합니다.
예제 예 : 트리 또는 그래프와 같은 데이터 모음을 고려하십시오. 반복자 패턴을 사용하여 클라이언트 코드가 다양한 구조 간의 차이를 처리 할 필요없이 이러한 복잡한 데이터 구조의 요소에 대한 균일 한 액세스를 제공 할 수 있습니다. 예를 들어, DevthFirstiterator 및 BastThiterator와 같은 다른 반복자가 그래프를 가로 질러 가질 수 있습니다.
정의 : 방문자 패턴을 사용하면 작동하는 객체의 구조에서 알고리즘을 분리 할 수 있습니다. 이 패턴은 기존 클래스에 새로운 작업을 수정하지 않고 추가하는 방법을 제공합니다.
예제 : 보험 상황에 고객 관리 시스템이 있다고 상상해보십시오. 방문자 패턴을 통해 물체는 고객 목록을 가로 지르고 보험에 관한 개인화 된 메시지를 보낼 수 있습니다.
정의 : 어댑터 패턴을 사용하면 호환되지 않는 인터페이스가 함께 작동 할 수 있습니다. 기존 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환하여 양립 할 수없는 두 인터페이스 사이의 브리지 역할을합니다.
예제 사용 : 차트 렌더링을위한 새로운 인터페이스가 있다고 가정하지만 기존 라이브러리는 다른 인터페이스와 유사한 기능을 제공합니다. 기존 라이브러리를 다시 작성하는 대신 어댑터를 사용하여 기존 라이브러리가 새로운 렌더링 인터페이스와 함께 작동하도록하므로 완벽한 통합이 가능합니다.
정의 : 브리지 패턴은 구현과의 추상화를 구현하는 구조적 패턴으로 독립적으로 변할 수 있습니다. 대규모 클래스 또는 밀접하게 관련된 클래스 세트를 독립적으로 개발하고 수정할 수있는 두 개의 개별 계층 (추상화 및 구현)으로 나누는 데 사용됩니다.
예제 : 피자 배달 애플리케이션에는 다양한 유형의 피자가 있으며 각각 독특한 맛과 다른 요리 스타일을 가진 다양한 유형의 레스토랑이 있습니다. 피자 주문이 배치되면 응용 프로그램은 브리지 패턴을 사용하여 고객의 선호도에 따라 피자가 구성되고 선택된 식당의 특정 스타일에 따라 요리되도록합니다. 이런 식으로 교량 패턴은 다양한 유형의 피자와 레스토랑의 다양한 요리 스타일 간의 통합을 용이하게하여 효율적이고 개인화 된 배달을 가능하게합니다.
정의 : 복합 패턴은 객체 및 개별 물체 그룹을 균일하게 처리 할 수있는 구조적 패턴입니다. 이 패턴은 객체를 트리 구조로 구성하여 부분적인 계층 구조를 나타냅니다. 이를 통해 사용자는 개별 객체 및 객체 구성을 균일하게 작업 할 수 있습니다.
예제 : 개별 품목 및 기타 상자가 포함 된 선물 상자 관리 시스템을 상상해보십시오. 클라이언트는 메인 박스를 만들고 책 및 비디오 게임과 같은 일부 항목과 책이 들어있는 작은 상자를 추가합니다. 그런 다음 메인 박스 내부의 모든 품목의 총 가격이 계산됩니다. 복합 패턴을 통해 개별 객체 및 객체 구성을 동일한 방식으로 처리하여 코드를 단순화하고 개별 객체 및 객체 그룹 모두에서 작업을 균일하게 만듭니다.
정의 : 데코레이터 패턴은 상속을 통해 구조를 변경하지 않고 동적으로 객체에 추가 책임을 추가 할 수있는 구조적 패턴입니다. 이 패턴은 기능을 확장하기 위해 확장 클래스를 도출하는 유연한 대안을 제공합니다.
예제 사용 : 알림 시스템이 있다고 상상해보십시오. 데코레이터 패턴을 통해 다양한 소셜 플랫폼의 기능을 확장 할 수 있습니다. 이러한 방식으로 코드를 직접 수정하지 않고도 다양한 채널을 통해 알림을 전송할 수 있습니다.
정의 : Facade Pattern은 서브 시스템의 인터페이스 세트에 대한 통합 인터페이스를 제공하는 구조 패턴입니다. 이 패턴은 하위 시스템을보다 쉽게 사용할 수 있도록 높은 수준의 인터페이스를 정의합니다.
예제 사용 : 오디오, 비디오 및 블루투스 연결을위한 서브 시스템이 포함 된 자동차에서 멀티미디어 장치를 관리하기위한 복잡한 시스템을 고려하십시오. 외관은 음악을 시작하거나 비디오를 중지하거나 통화를 관리하여 하위 시스템 간의 복잡성과 종속성을 숨기는 간단한 인터페이스를 제공 할 수 있습니다.
정의 : 플라이급 패턴은 공유를 사용하여 많은 수의 세밀한 물체를 효율적으로 지원하는 구조적 패턴입니다. 객체 상태의 대부분을 공유하고 외부로 만들 수있을 때 특히 유용합니다.
예제 : 책 유형을 관리하는 응용 프로그램이 있다고 상상해보십시오. 공장을 사용하여 책 유형의 인스턴스를 만들고 공유합니다. 이런 식으로, 동일한 유형의 책이 여러 번 요청되면 매번 새 객체를 만드는 대신 동일한 객체를 반환합니다. 이는 메모리를 저장하고 응용 프로그램의 전반적인 성능을 향상시킵니다.
정의 : 프록시 패턴은 다른 개체에 대한 대리자 또는 자리 표시자를 제공하여 액세스를 제어합니다. 이 패턴은 물체에 액세스하거나 게으른로드에 대한 제한을 부과하거나 분산 환경에서 물체의 투명한 위치를 제공하기 위해 사용됩니다.
예제 사용 : 파일 시스템에 대한 액세스 제어에서 프록시를 사용하여 파일의 사용자 작업을 제어 할 수 있습니다. 프록시는 파일에 실제 액세스를 허용하기 전에 사용자의 자격 증명을 확인하여 추가 보안을 제공합니다.
정의 : 싱글 톤 패턴은이 인스턴스에 대한 글로벌 액세스 포인트를 제공하는 동시에 클래스가 하나의 인스턴스 만 있도록하는 창조적 패턴입니다.
예제 사용 : 응용 프로그램에서 싱글 톤 패턴을 사용하여 응용 프로그램의 구성을 관리 할 수 있습니다. 싱글 톤 객체는 응용 프로그램 실행 중에 일정하게 유지되는 모든 구성을 포함 할 수 있으며 프로그램의 여러 부분에서 읽을 수 있습니다.