16. 디자인 패턴

소개 16.1 디자인 패턴   

      1) 디자인 패턴은 유용한 경험을 요약 유사한 소프트웨어 공학 문제에 직면 프로그래머는 모드 [디자인 사고]를 대신하지 코드,하지만 일반적인 솔루션의 특정 문제, 디자인 패턴 (디자인 패턴)입니다 가장 좋은 방법. 이 솔루션은 시행 착오를 통해 꽤 많은 시간 동안 많은 소프트웨어 개발자들이 요약되어

      자연 2) 디자인 패턴은 소프트웨어의 유지 보수, 다양성과 확장 성을 개선하고 소프트웨어의 복잡성을 줄이기 위해 

      3) << >> 디자인 패턴은 고전이고, 저자는 에리히 감마, 리처드 헬름, 랄프 존슨과 존 브리 시즈 디자인 (일반적으로 "네 GOF의 갱"라고도 함)입니다 

      4) 디자인 패턴이 특정 언어, 자바, PHP, C ++로 한정되지 않고, 디자인 패턴을 갖는

디자인 패턴의 16.2 유형 

      디자인 패턴은 세 가지 유형으로 23가지 총 분할된다

      1) 스키마를 만듭니다 싱글 패턴, 추상 팩토리 패턴 빌더 패턴, 공장 패턴, 프로토 타입 모델을

      2) 구조 모델 : 어댑터 모드, 브리지 모드, 장식 패턴, 복합 모드, 외관 모델, 플라이급, 프록시 모드

      모델 3) 유형 : 템플릿 메소드 패턴, 커맨드 모드, 반복자 패턴 관찰자 패턴, 중간 모델 메모 모드 인터프리터 모드 (인터프리터 모드), 주 패턴, 전략 패턴 듀티 쇄 (책임 패턴 체인) 방문자 패턴

16.3 간단한 공장

  16.3.1 기본 소개 

      1) 단일 공장 패턴은 스키마를 만들 속하지만 GOF 디자인 패턴의 23가지 하나에 속하지 않습니다. 간단한 공장 패턴은 제품 클래스의 어떤 종류의 인스턴스를 생성하는 팩토리 객체에 의해 결정된다. 간단한 공장 패턴은 공장 모델 제품군은 가장 간단하고 실용적인 모드입니다

      2) 간단한 공장 패턴 : 객체 클래스의 정의를 생성하는 객체 클래스의 인스턴스 행동 (코드를 캡슐화)

      우리가 어떤 종류, 어떤 종류, 또는 오브젝트의 배치를 작성할를 많이 사용하는 경우 3) 소프트웨어 개발에서, 그것은 공장 패턴을 사용합니다  

16.4 소개 팩토리 메소드 패턴 

      팩토리 메서드 패턴 : 오브젝트의 추상적 정의를 생성하는 방법은 서브 클래스가 인스턴스화 결정된다. 개체 모델을 인스턴스화하는 팩토리 메소드는 서브 클래스까지 연기됩니다

16.5 추상 팩토리 패턴 

  16.5.1 기본 소개 

      1) 추상 팩토리 패턴 : 종속 개체 또는 클러스터를 만들기위한 관련 특성의 정의, 특정 클래스를 지정하지 않고

      2) 추상적 인 공장 모델은 간단한 공장 모드와 통합 모드 공장의 방법이 될 수 있습니다

      3) 설계 관점에서 추상 팩토리 패턴) 간단한 공장 개선의 패턴 (또는 더 추상화라는 것입니다

      4) 공장은 두 개의 층, AbsFactory (추상 공장)과 식물 고유의 구현 서브 클래스로 추상화. 프로그래머는 종류, 식물 기반 클러스터로 같은 간단한 하나의 식물에 따라 개체를 만드는 데 해당 하위 클래스 팩토리를 사용하고 확산 코드의 유지에 더 도움이 있습니다

요약 16.6 공장 모드 

      1) 공장 패턴의 의미 : 객체의 인스턴스를 코드가 디커플링 및 주요 프로젝트의 종속성을 달성하기 위해, 클래스 통합 관리 및 유지 보수에 배치, 추출됩니다. 이에 프로젝트의 확장 및 유지 보수 개선

      디자인 패턴의 추상적 인 원칙 2) 의존

        - 당신은 개체 인스턴스를 만들 때, 새로운 클래스를 직접하지만, 팩토리 메소드의 행동이 새로운 클래스 반환하지 않기. 이 또한이 책은 변수가 특정 클래스에 대한 직접 참조를 보유하지 않는 말한다

        - 수업을하지 마십시오 (인터페이스) 콘크리트 클래스를 상속하지만, 추상 클래스 또는 특성을 상속

        - 기본 클래스에서 오버라이드 (override)하지 않는 방법이 달성 된

16.7 싱글

  16.7.1 기본 소개 

      싱글 모드는 다음과 같습니다 전체 소프트웨어 시스템, 개체 인스턴스는 하나 개의 클래스가 될 수 있도록

  응용 프로그램 시나리오 16.7.2 싱글 패턴  

      이러한 Hibernate의 SessionFactory를, 그것은 프록시 데이터 저장 소스의 역할을하고, 세션 객체를 생성하는 책임이있다. 다음은 싱글 톤 패턴을 사용하는 경량하지, 정상적인 상황에서, 프로젝트는 SessionFactory에의 충분한을 필요로 SessionFactory에

  예 16.7.3 단일 모드 - Lanhan 공식 

오브젝트 boke_demo01 { 

  DEF 주 (인수 : 배열 [문자열]) : 단위 = { 
    브로 INSTANCE1 = SingleTon.getInstance 
    브로 인스턴스 2 = SingleTon.getInstance 
    경우 (INSTANCE1 == 인스턴스 2) { 
      에 println ( "相等") 
    } 
  } 
} 

//将싱글的构造方法私有化
클래스 싱글 개인 () {} 

//懒汉式
//看底层
/ * 
  공공 싱글 톤의 getInstance () { 
    경우 (S () == NULL) { 
      S_의 $ 이퀄라이저 (새 싱글 ()); 
    } 
    리턴 S (); 
  } 
 * / 
객체 싱글 {// 싱글 $ 
  개인 var에 S : 싱글 = NULL 

  데프의 getInstance = { 
    경우 (들 == 널) { 
      S = 새로운 싱글 
    }
    S 
  } 
}

  예 16.7.4 단일 모드 - 굶주린 공식 

{boke_demo01는 개체 

  DEF 주 (인수가 : 어레이 [문자열]) : 단위 =는 { 
    브로 INSTANCE1 = SingleTon2.getInstance 
    브로 SingleTon2.getInstance 인스턴스 2 = 
    IF (INSTANCE1가 == 인스턴스 2) { 
      (! "동일") println 메소드가 
    } 
  } 
} 


// 것 싱글 민영화 생성자 
클래스 SingleTon2 비공개 () {} 

// 굶주린 공식 
// 아래 참조 
/ * 
공공 SingleTon2의 getInstance를 () { 
    ; S ()를 호출 
  } 
 * / 
객체 SingleTon2 싱글 $ {// 
  SingleTon2을 : 개인 S 발을 새로운 새 SingleTon2 = 

  DEF의 getInstance = { 
    S 
  } 
}

16.8 장식 패턴 

  16.8.1 장식 패턴 원리 

      1) 장식 패턴 택배 패키지 같다

        - 바디 : 같은 : 도자기, 의류 (구성 요소)

        - 포장 : 예를 들면 : 플라스틱 거품, 판지, 나무로 가득 신문 (실내 장식)

      2) 부품 

      3) ConcreteComponent 和 실내 장식

        ConcreteComponent : 같은 단일 커피와 같은 특정 주제,

      4) 실내 장식 : 각종 향료 장식,

  16.8.2 데코레이터 패턴 정의 

      1) 실내 장식 : 물체에 부착 된 동적 새로운 기능 대물 기능 확장, 그것은) (재귀 상속보다 융통성은 장식 패턴도) 개폐의 원리 (OCP 반영   

16.9 옵저버 패턴 

  16.9.1 관찰자 모드 원리 

      - 옵저버 패턴과 유사 세트 우유 사업

        1) 우유 역 : 주제

        2) 사용자 : 옵저버

      대 상 : 등록, 제거 및 알림

        1) registerObserver 등록

        2) removeObserver 삭제

        3)를 notifyObserver () 등록 된 모든 사용자가 다른 필요에 따라, 당신은 사용자가 수행 할 수 있도록 데이터를 업데이트 할 수 있습니다 통지, 특정의 특정 요구를 보면, 밀어 구현 될 수있다

        

      -Observer : 입력받는 

        

      - 옵저버 패턴 : 객체 사이에 많은 의존 한 디자인, 주제의 종속 개체, 우유 주제, 하나는 1 스테이션으로 의존 관찰자, 제목 관찰자 변경 알림을 객체. 관찰자는 다 자 사용자입니다

16.10 제 모드 (프록시) 

  기본 소개 16.10.1 기관 모델  

      1) 프록시 모드 : 목적이 객체에 대한 액세스를 제어하기 위해 대체를 제공

      2) 프록시 객체는 큰 오버 헤드 객체를 생성하는 원격 개체 일 수도 있고 객체 보안 제어가 필요 (동적 프록시)

      이러한 원격 에이전트 정적 에이전트 동적 프록시), 액세스 및 관리 제어 될 서로 다른 형태 (3) 프록시 모드

  16.10.2 동적 프록시 

      - 동적 에이전트 : 앞으로 지정된 클래스 (객체)에 대한 동적 프록시 클래스 (객체)와 메서드 호출을 만들 실행

      -도 동적 프록시 호출기구

      

      1) 프록시 및 조합의 InvocationHandler 프록시 역할 역할

      2) RealSubject은 인터페이스 주제를 구현하는 실제 개체입니다

      3) 사용, 우리는 다음과 같은 직접 액세스 RealSubject 개체를 원하지 않는다 : 우리는 액세스 할이 객체가 제어에

      4) 우리는 대리 프로그램의 동적 RealSubject, 완벽한 통화를 만들기 위해 동적 프록시를 사용

      5) 필요에 따라 동적 프록시는 다양한 조합을 만들

      6) 프록시 RealSubject 호출의 동적을 완료 할 수 있습니다 프록시 + 호출을 사용하기 때문에, 인터페이스 메소드의 주제를 구현한다

      7) 그러나 RealSubject 프록시 방법은, (사실에서의 InvocationHandler에 의해 성공적으로 제어되는 호출하여, 여기에) 보호 에이전트입니다

      8) 이해 : 객체라는 실제 대안 프록시 객체를 생성, 제어를 달성하기 위해 반사를 사용하여

  16.10.3 몇 가지 일반적인 프록시 모드 소개 - 여러 변종 

      1) 방화벽 프록시

        방화벽을 통해 프록시를 통해 네트워크 내에서 공용 네트워크에 대한 액세스를 가능하게한다.

      2) 캐싱 프록시

        예를 들어 이미지 파일 및 기타 리소스, 리소스를 확인 취할 경우 자원을 얻을 경우 첫번째 캐싱 프록시, 취할를 요구하는 경우, 다음 공용 네트워크 또는 데이터베이스 및 캐시을

      3) 고정 프록시

        정적 에이전트는 일반적으로 기존 비즈니스 로직의 확장을 위해 사용된다. 예를 들어, 클래스는 두 번째 파티 패키지 개최하고 이러한 방법 중 일부를 호출합니다. 이러한 로깅, 인쇄 작업 등. 당신은 실제 개체를 유지하기 위해 프록시 클래스를함으로써 두 번째 파티와 같은 방법의 방법을 구현하는 프록시 클래스를 생성 할 수 있습니다, 비즈니스 로직을 증가의 목적을 달성하기 위해 프록시 클래스의 메소드를 호출

      4) CGLIB

        CGLIB 사용하여 [코드 생성 라이브러리] 동적 에이전트, 기본 프레임 워크 ASM 바이트 코드 생성 된 프록시 클래스의 바이트 코드를 생성하여, 인터페이스를 구현해야합니다 대리자 클래스를 필요로하지 않습니다

      5) 동기화 에이전트

        주로 멀티 스레드 프로그래밍, 다중 스레드 간의 완벽한 동기화에 사용

 

  

추천

출처www.cnblogs.com/zhanghuicheng/p/10890129.html