주요 소프트웨어 디자인 패턴은 무엇입니까?
소프트웨어 디자인 패턴에는 크게 세 가지 범주가 있습니다.
1. 생성 기반 패턴:
1. 팩토리 메서드 패턴은 다음과 같은 이유로 생성되었습니다. 단순 팩토리 패턴의 문제 단순 팩토리 패턴에서는 클래스 생성이 팩토리 클래스에 따라 달라집니다. 프로그램을 확장하려면 팩토리 클래스를 수정해야 하므로 팩토리 메서드는 다음과 같습니다. 패턴이 나타나면 팩토리 인터페이스와 여러 팩토리 구현 클래스만 생성하면 됩니다.
2. 추상 팩토리 패턴 추상 팩토리 패턴은 특정 클래스를 지정하지 않고 일련의 관련되거나 상호 의존적인 개체를 생성하기 위한 인터페이스를 제공합니다. 팩토리 메소드 패턴과의 차이점은 팩토리 메소드 패턴은 여러 객체를 구현할 수 있는 팩토리를 생성하는 반면 추상 팩토리 패턴은 여러 팩토리를 정의하는 추상 팩토리 인터페이스를 제공하며 각 팩토리는 여러 객체를 생성할 수 있다는 것입니다.
3. 싱글톤 모드는 클래스에 하나의 인스턴스만 있도록 하고 이에 액세스할 수 있는 전역 액세스 지점을 제공하는 동시에 클래스 내에 단일 개체를 생성하고 권한을 설정합니다. 클래스 외부에서는 액세스할 수 없습니다. 싱글톤 객체는 JVM에 객체의 인스턴스가 하나만 존재하도록 보장합니다.
4. 빌더 패턴 빌더 패턴은 복잡한 구성과 표현을 분리하므로 동일한 구성 프로세스가 다른 표현을 생성할 수 있습니다. 프로그램에서는 변경되지 않는 일부 기본 구성 요소를 빌더를 통해 결합하여 복잡한 개체를 만들고 분리를 달성합니다.
5. 프로토타입 모드: 프로토타입 인스턴스를 사용하여 생성할 객체의 유형을 지정하고, 이러한 프로토타입을 복사하여 새 객체를 생성합니다. 실제로 개체의 복사본이 복사되어 호출자에게 반환됩니다. 개체는 Cloneable을 상속하고 복제 메서드를 재정의해야 합니다. 프로토타입 패턴의 개념은 객체를 프로토타입으로 사용하고 이를 복사 및 복제하여 원본 객체와 유사한 새로운 객체를 생성하는 것입니다.
2. 구조적 모드:
1. 어댑터 모드 어댑터 모드는 호환되지 않는 인터페이스로 인해 함께 작동할 수 없는 클래스를 서로 연결하여 독립적인 인터페이스의 기능을 가능하게 합니다. 중개자 역할을 하는 어댑터와 함께 작동합니다.
2. 데코레이션 모드: 데코레이터 모드는 객체에 일부 추가 책임을 동적으로 추가하고, 객체에 몇 가지 새로운 기능을 추가하며, 데코레이팅 객체와 데코레이팅된 객체가 동일한 인터페이스를 구현하도록 요구합니다. 장식된 개체의 인스턴스를 보유합니다. 동적 추가 외에도 동적으로 취소할 수도 있습니다. 상속은 정적이기 때문에 상속을 사용할 수 없습니다.
3. 프록시 모드는 다른 객체에 대한 프록시를 제공하여 이 객체에 대한 액세스를 제어하는 것, 즉 클래스의 프록시 클래스를 생성하고 프록시에 간접적으로 액세스하는 과정입니다. 클래스의 기능은 제어입니다.
4. 모양 모드 모양 모드는 하위 시스템의 인터페이스 집합에 대해 일관된 인터페이스를 제공하므로 이 하위 시스템을 더 쉽게 사용할 수 있습니다.
5. 브릿지 모드 브릿지 모드는 추상적인 부분과 구현 부분을 분리하여 독립적으로 변경이 가능합니다. 브리지 모드는 사물을 특정 구현과 분리하여 독립적으로 변경할 수 있도록 하는 것입니다(갑자기 mvc 모드가 떠오릅니다).
6. 조합 모드: 조합 모드는 개체를 트리 구조로 결합하여 "부분-전체" 계층 구조를 나타냅니다. 조합 모드를 사용하면 단일 개체와 결합된 개체를 일관되게 사용할 수 있습니다.
7. 플라이웨이트 모드: 플라이웨이트 모드는 *공유 기술을 사용하여 수많은 미세한 개체를 효과적으로 지원합니다. 플라이웨이트 모드의 주요 목적은 객체 공유, 즉 공유 풀을 실현하는 것입니다. 시스템에 객체가 많을 때 메모리 오버헤드를 줄이고 일치하는 객체가 없으면 기존의 유사한 객체를 재사용할 수 있습니다. 개체 생성을 줄이고 시스템 메모리를 줄이며 효율성을 향상시킬 수 있는 새 개체를 만듭니다.
3. 행동 모델:
1. 전략 모델:
전략 모델은 일련의 알고리즘을 정의하고 이를 하나씩 캡슐화하며 다음을 사용합니다. 상호 교환 가능하며 알고리즘 변경은 알고리즘을 사용하는 고객에게 영향을 미치지 않습니다.
2. 템플릿 메서드 패턴:
템플릿 메서드 패턴은 작업에서 알고리즘의 뼈대를 정의하고 일부 단계를 하위 클래스로 연기합니다.
이 패턴은 추상 클래스에 기본 메서드를 두고 추상 또는 실제 메서드일 수 있는 1...n개의 메서드를 정의하고, 클래스를 정의하고 추상 클래스를 상속한 후 추상 메서드를 호출하여 재정의하는 패턴입니다. 클래스가 있으면 하위 클래스에 대한 호출이 실현됩니다.
템플릿 메서드를 사용하면 서브클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 특정 단계를 재정의할 수 있으며 고정 단계와 고정 논리가 있는 일부 메서드를 템플릿 메서드로 캡슐화할 수 있습니다. 템플릿 메서드를 호출하면 이러한 특정 단계가 완료됩니다.
3. 관찰자 패턴:
관찰자 패턴은 객체 간의 일대다 종속 관계를 정의합니다. 객체의 상태가 변경되면 해당 객체에 의존하는 모든 객체가 변경됩니다. 자동으로 통보되고 업데이트됩니다.
즉, 관찰자의 상태가 변경되면 모든 관찰자에게 알림이 전달됩니다. 이 종속 방식은 이메일 구독과 QQ 메일함의 RSS 구독에서 사용자가 일부 블로그를 탐색할 때 종종 발생합니다. RSS 아이콘이 보이면 간단히 말해서 기사를 구독한 것입니다. 후속 업데이트가 있으면 사용자에게 제때에 알림이 전송됩니다. 이 현상은 일반적인 관찰자 모드입니다.
4. 반복자 패턴:
반복자 패턴은 개체의 내부 표현을 노출하지 않고 집계 개체의 각 요소에 순차적으로 액세스하는 방법을 제공합니다.
Java에서는 집계 클래스의 각 요소를 순회하는 동작이 분리되어 반복자로 캡슐화되므로 반복자가 순회 작업을 처리할 수 있으므로 집계 클래스의 내부를 노출하지 않고 집계 클래스가 단순화됩니다. . , 우리가 자주 사용하는 JDK의 모든 클래스도 이러한 기본 사항입니다.
5. 책임 사슬 모델:
책임 사슬 모델은 요청 송신자와 수신자를 함께 연결하는 것을 방지하여 여러 객체가 요청을 수신하도록 허용하고 이러한 객체를 A 체인으로 연결합니다. 요청은 객체가 처리할 때까지 이 체인을 따라 전달됩니다. 여러 개체가 있으며 각 개체는 다음 개체에 대한 참조를 보유하므로 하나의 개체가 요청을 처리하기로 결정할 때까지 요청이 전달되는 체인을 형성합니다.
6. 명령 모드:
명령 모드는 요청을 객체로 캡슐화하므로 발급자가 다양한 요청으로 클라이언트를 매개변수화할 수 있습니다. 모드에는 요청과 실행의 분리를 실현하는 호출자, 수신자 및 명령의 세 가지 개체가 있습니다. 호출자는 실행할 명령을 선택하고 명령은 수신자를 지정합니다.
7. 메모 모드:
메모 모드는 객체의 내부 상태를 캡처하고 캡슐화를 파괴하지 않고 이 상태를 객체 외부에 저장합니다. 원래 클래스의 정보를 저장하는 메모 클래스를 생성하는 동시에 메모 클래스를 저장하는 메모 웨어하우스 클래스를 생성합니다. 주요 목적은 객체를 적절한 위치에 복원할 수 있도록 객체의 특정 상태를 저장하는 것입니다. 즉, 백업을 만드는 시간입니다.
8. 상태 모드:
상태 모드를 사용하면 객체의 내부 상태가 변경될 때 동작을 변경할 수 있습니다. 객체에는 여러 상태가 있으며 각 상태에는 특정 동작이 있습니다.
9. 방문자 모드:
방문자 모드는 주로 데이터 구조와 데이터 작업을 분리합니다. 방문자를 받기 위한 외부 인터페이스를 제공하기 위해 방문 클래스에 인터페이스를 추가합니다. 방문자는 방문 구조에 대한 일부 복잡한 작업을 캡슐화하고 구조와 알고리즘을 분리하며 확장성이 뛰어납니다. 일반인의 관점에서는 객체 데이터 구조와 동작을 분리하는 방법입니다.
10. 중재자 패턴:
중개자 패턴은 중재자 개체를 사용하여 일련의 개체 상호 작용을 캡슐화하므로 개체가 서로를 명시적으로 참조할 필요가 없습니다. 느슨하게 결합되어 있으며 상호 작용이 독립적으로 변경될 수 있습니다.
11. 통역 모드:
통역 모드는 언어를 제공하고, 문법적 표현을 정의하고, 이 식별자를 사용하여 언어를 해석하는 통역사를 정의하는 것입니다. 이 범위 내에서 사용되며 정규식에 대한 설명 등 적용 범위가 좁습니다.
추가 정보:
소프트웨어 디자인의 개념과 중요성:
소프트웨어 디자인 패턴은 소프트웨어 디자인 경험을 요약한 것이며 소프트웨어 디자인에서 반복되는 주제입니다. 설계 문제에 대한 성공적인 솔루션에 대한 설명입니다. 이러한 성공적인 디자인 경험을 기록하고 향후 사용을 촉진하기 위해 소프트웨어 디자인 패턴에는 일반적으로 패턴 이름, 문제, 솔루션 및 효과의 4가지 기본 요소가 포함됩니다.
패턴 이름은 사실 기억을 돕기 위해 붙인 이름이다. 소프트웨어 디자인에서 사용되는 기술 용어로 디자이너 간의 소통을 돕는다.
문제는 디자이너가 직면한 디자인 시나리오를 설명하고 어떤 상황에서 이 패턴을 사용해야 하는지 디자이너에게 알려주는 데 사용됩니다.
솔루션은 디자인의 세부 사항을 설명하며 일반적으로 솔루션의 도식 다이어그램(예: UML 클래스 다이어그램, 시퀀스 다이어그램 등 및 일부 도식 다이어그램)과 관련 텍스트 설명을 제공합니다. , 또한 제공합니다. 솔루션에 대한 깊은 이해를 제공하기 위해 일부 코드 예제가 제공됩니다.
효과는 디자인 솔루션의 장점과 단점을 설명합니다. 이러한 효과는 일반적으로 확장성, 재사용성 등과 같은 소프트웨어의 품질 속성을 지향합니다.
소프트웨어 디자인 패턴의 중요성은 디자인 재사용에 있습니다. 디자인 패턴을 사용하면 디자이너는 반복적인 디자인에 시간을 낭비하지 않고도 입증된 성공적인 디자인 솔루션을 더 쉽게 배우거나 직접 사용할 수 있습니다. 일부 디자인 패턴은 표시되는 클래스 다이어그램 디자인과 코드 예제도 제공하여 디자인 문서화 및 소프트웨어 개발을 직접 지원합니다.