한 기사에 세 가지 디자인 패턴 (23 개의 디자인 패턴)이 요약되어 있습니다.

어제 우리는 디자인 패턴의 7 가지 원칙을 소개했고, 오늘 우리는 디자인 패턴의 세 가지 특정 범주와 23 개의 특정 디자인 패턴을 소개합니다.

개요

세 가지 디자인 패턴

세 가지 디자인 패턴은 생성, 구조 및 동작입니다.

  • 생성 모드는 주로 객체 생성 방법을 설명하는 데 사용됩니다 (5 가지 유형).
  • 구조적 패턴은 주로 클래스 또는 객체 (7 가지 유형)의 조합을 실현하는 방법을 설명하는 데 사용됩니다.
  • 행동 패턴은 주로 클래스 또는 객체가 상호 작용하는 방식과 책임을 할당하는 방법 (11 가지 유형)을 설명하는 데 사용됩니다.

마인드 맵은 다음과 같습니다.

영상

공개 계정 : java Toka Fox에주의를 기울이고 [디자인 모드]에 답장하여 원본 고화질 사진을 얻으십시오. 관심을 가져 주셔서 감사합니다.

생성 모드

싱글 톤 모드

개체가 메모리에 한 번만 생성되는 디자인 패턴입니다.

배고픈 중국어
public class Singlenton{
    // 只实例化一次
    private final static Singleton INSTANCE = new Singleton();
    // 私有构造方法,防止被实例化
    private Singleton(){}
    public static Singleton getInstance(){
        return INSTANCE;   
    }
}
게으른 (재확인)
public class Singleton{
    // 使用volatile修饰,让变量每次使用的时候从主存主取而不是从各个线程的“工作内存”中
    private static volatile Singleton instance;
    // 私有构造方法,防止被实例化
    private Singleton(){}
    public static Singleton getInstance(){
        if(instance == null){
            synchronized(Singleton.class){
                if(instance == null){
                    instance = new Singleton;   
                }
            }
        }
        return instance;
    }
}
정적 내부 클래스 패턴
public clsaa Singleton{
    // 私有构造方法,防止被实例化
    private Singleton(){}
    // 使用一个内部类来维护单例,只有在改类被加载的时候,才会实例化对象
    private static class SingletonInstance{
        private static final Singleton INSTANCE = new Singleton();
    }
    // 获取实例
    public static Singleton getInstance(){
        return SingletonInstance.INSTANCE;
    }
}
  • hungry man 모델의 업그레이드 버전은 자원 낭비 문제를 해결하고 스레드 안전성도 보장합니다. 객체는 내부 클래스가로드 될 때만 인스턴스화됩니다. 게으른 사람과 비교하여 정적 내부 클래스 메서드는 동기화 블록에서 큐잉을 방지합니다. 널 판단하고 게으른 모드보다 성능이 좋으면 사용하는 것이 좋습니다
열거 모드
public enum Singleton{
    INSTANCE;
    public Singleton getInstance(){
        return INSTANCE;
    }
}
  • 스레드 안전성. JVM은 스레드 안전성과 단일 인스턴스를 보장합니다. 리플렉션 및 직렬화 시나리오에서 단일 인스턴스는 여전히 보장 될 수 있습니다.

공장 모드

간단한 엔지니어링 모드

통합 된 팩토리 클래스를 만들고 전달 된 매개 변수에 따라 다른 개체를 만들고 여러 제품에서 제품 중 하나를 선택해야합니다.

공장 모드

팩토리 패턴은 모든 객체를 관리하기 위해 통합 팩토리 클래스를 사용하지 않지만 각 객체는 이에 대응하는 다른 팩토리를 가지고 있습니다.

추상 공장 패턴

추상 팩토리 패턴은 팩토리 패턴의 추가 최적화입니다. 팩토리 클래스는 하나의 객체를 생성 할뿐만 아니라 객체 그룹도 생성 할 수 있습니다.

간단한 공장 패턴은 외부에서 값을 전달하여 다른 객체를 얻는 것입니다.

추상 팩토리 패턴은 값을 전달하지 않고 메소드를 통해 직접 객체를 얻습니다.

빌더 모드

복잡한 개체의 구성을 해당 표현과 분리하여 동일한 구성 프로세스가 다른 표현을 만들 수 있습니다.

즉, 필요한 매개 변수 만 구성 중에 전달되고 다른 매개 변수는 선택적으로 set 메소드를 통해 전달됩니다.

기술
  • 클래스에 정적 내부 클래스 Builder를 만든 다음 클래스의 매개 변수를 Builder 클래스에 복사합니다.
  • 클래스에 개인 생성자를 만듭니다. 매개 변수는 Builder 유형입니다.
  • Builder에서 설정 함수를 만들고 클래스의 선택적 매개 변수에 값을 할당하면 반환 값이 Builder 유형의 인스턴스입니다.
  • Builder에서 build () 메서드를 만들고 그 안에 클래스의 인스턴스를 빌드하고 반환합니다.

프로토 타입 모드

프로토 타입 인스턴스를 사용하여 만들 객체 유형을 지정하고 이러한 프로토 타입을 복사하여 새 객체를 만듭니다. 프로토 타입 모드는 개체 생성 모드입니다.

구조 모델

어댑터 모드

목적은 인터페이스를 조정하는 것입니다.

수업 적응
  • 조정될 기존 클래스가 있습니다.
public class Adaptee{
    public void adapteeRequest(){
        System,out,println("被适配者的方法");
    }
}
  • 대상 인터페이스 정의
public interface target{
    void request();
}
  • 어댑터를 통해 인터페이스 상속 클래스를 구현 한 다음 부모 클래스 메서드를 호출합니다.

데코레이터 모드

장식 모드를 사용하면 구조를 변경하지 않고 기존 개체에 새로운 기능을 추가 할 수 있습니다. 이 유형의 디자인 패턴은 기존 클래스의 래퍼 역할을하는 구조 패턴에 속합니다.

동적으로 기능을 추가합니다.

대행사 모델

프록시 모델에서 한 클래스는 다른 클래스의 기능을 나타냅니다. 이러한 유형의 디자인 패턴은 구조적 패턴에 속합니다. 에이전트 패턴에서는 외부에 기능적 인터페이스를 제공하기 위해 기존 개체로 개체를 생성합니다.

주로 정적 프록시와 동적 프록시로 구분

외관 모드

모양 모드는 시스템의 복잡성을 숨기고 클라이언트가 시스템에 액세스 할 수있는 인터페이스를 제공합니다. 이러한 유형의 디자인 패턴은 시스템의 복잡성을 숨기기 위해 기존 시스템에 인터페이스를 추가하는 구조적 패턴입니다.

이 모델에는 클라이언트 요청에 대한 단순화 된 메서드와 기존 시스템 클래스 메서드에 대한 위임 된 호출을 제공하는 단일 클래스가 포함됩니다.

모양 모드는 Facade 클래스에 관계를 두는 것이므로 클래스 간의 결합 정도를 줄입니다.

브리지 모드

브리징은 추상화와 실현을 분리하여 둘이 독립적으로 변경 될 수 있도록하는 데 사용됩니다. 추상화 및 실현 전에 브리지 구조를 제공함으로써 둘의 분리가 실현됩니다.

이 모드는 인터페이스를 브리지로 사용하여 3 차원 기능을 인터페이스 구현 클래스와 독립적으로 만듭니다. 이 두 유형의 클래스는 서로 영향을주지 않고 구조적으로 변경할 수 있습니다.

조합 모드

유사한 개체 그룹을 단일 개체로 처리하는 데 사용됩니다. 조합 모드는 부품 및 전체 수준을 나타내는 데 사용되는 트리 구조에 따라 개체를 결합합니다. 이 유형의 디자인 패턴은 구조적 패턴입니다. 개체 조합의 트리 구조를 만듭니다.

자체 개체 그룹을 포함하는 클래스를 만들었습니다. 이 클래스는 동일한 객체 그룹을 수정하는 방법을 제공합니다.

플라이급 모델

주로 메모리 사용량을 줄이고 성능을 향상시키기 위해 생성되는 개체 수를 줄이는 데 사용됩니다. 이러한 유형의 디자인 패턴은 응용 프로그램에 필요한 개체 구조를 개선하기 위해 개체 수를 줄이는 방법을 제공하는 구조 패턴입니다.

같은 종류의 기존 개체를 다시 사용하고 일치하는 개체가 없으면 새 개체를 만듭니다.

행동 모델

전략 모드 및 상태 모드

같은 지점
  • 동작과 상태를 일련의 작은 구성 요소로 분할하여 기능은 개폐 원리에 더 부합하고 확장하기 쉬운 조건 및 상태로 대체됩니다. 또한 두 가지 모두 다음과 같이 사용할 수 있습니다. if else 또는 branch에 대한 대안, 가장 큰 지원 행동 및 상태가 제한됨
  • 전략 모드에서 클래스의 기능은 현재 상황에 따라 능동적으로 변화하는 것입니다.
  • 상태 모드에서 클래스의 기능은 현재 상태에서 수동적으로 변경됩니다.
  • 전략 모드에서 각 동작 또는 알고리즘간에 상관 관계가 없습니다.
  • 상태 패턴의 상태와 상태 자체간에 연관성이 있습니다.

통역사 모드

언어의 문법 또는 표현을 평가하는 방법을 제공합니다. 이 패턴은 특정 컨텍스트를 해석하는 표현식 인터페이스를 구현합니다. 이 모드는 SQL 구문 분석, 기호 처리 엔진 등에 사용됩니다.

관찰자 모드

객체간에 일대 다 관계가있는 경우 관찰자 모드가 사용됩니다. 예를 들어 객체가 수정되면 종속 객체에 자동으로 알립니다.

중개 모델

중간 패턴은 여러 객체와 클래스 간의 통신 복잡성을 줄이는 데 사용됩니다. 이 모드는 일반적으로 서로 다른 클래스 간의 통신을 처리하고 느슨한 결합을 지원하며 코드를 쉽게 유지 관리하는 중간 클래스를 제공합니다.

메모 모드

적절한 시간에 개체를 복원하기 위해 개체의 특정 상태를 저장합니다.

명령 모드

명령 모드는 데이터 기반 디자인 모드입니다. 요청은 명령 형식으로 개체에 래핑되어 호출 개체에 전달됩니다. 호출 개체는 명령을 처리 할 수있는 적절한 개체를 찾고 명령을 실행하는 해당 개체에 명령을 전달합니다.

책임 사슬 모델

요청에 대한 수신자 개체 체인이 생성됩니다. 이 모드는 요청 유형을 제공하고 요청의 발신자와 수신자를 분리합니다.

방문자 모드

우리는 요소 클래스의 실행 알고리즘을 변경하는 방문자 클래스를 사용합니다. 이러한 방식으로 방문자가 변경됨에 따라 요소의 실행 알고리즘을 변경할 수 있습니다. 이러한 유형의 디자인 패턴은 행동 패턴입니다. 모드에 따라 요소 개체는 방문자 개체를 수신하므로 방문자 개체는 요소 개체에 대한 작업을 처리 할 수 ​​있습니다.

반복자 모드

Java 및 .net 프로그래밍 환경에서 일반적으로 사용되는 디자인 패턴입니다. 이 모드는 컬렉션 개체의 기본 표현을 알지 못해도 컬렉션 개체의 요소에 대한 순차 액세스를 생성합니다.

템플릿 방법 패턴

추상 클래스는 메서드를 실행하는 방법 / 템플릿을 공개적으로 정의합니다. 필요에 따라 메서드를 재정 의하여 하위 클래스를 구현할 수 있지만 호출은 추상 클래스에 정의 된 방식으로 이루어집니다.

마침내

  • 읽은 후 보람을 느낀다면 엄지 손가락을 올려주세요. 이것이 제가 업데이트하는 가장 큰 동기가 될 것입니다. 여러분의 성원에 감사드립니다.
  • 자바와 컴퓨터의 기본 지식에 초점을 맞춘 제 공개 계정 [Java Fox]에 관심을 가져 주신 모든 분들을 환영합니다. 읽은 후 무언가를 얻을 수 있도록 약속드립니다. 저를 믿지 않으시면 저를 때리십시오.
  • 읽은 후 다른 의견이나 제안이 있으면 의견을 말하고 공유하십시오. 여러분의 지원과 사랑에 감사드립니다.

—— 저는 Chuhu이고 당신만큼 프로그래밍을 좋아합니다.

영상

추천

출처blog.csdn.net/issunmingzhi/article/details/111353707