비가상 인터페이스 패턴

Non-virtual interface pattern

Non-Virtual Interface Pattern(NVI; 비가상 인터페이스 패턴)은 기본 클래스의 메서드를 덮어쓰는 방법을 제어합니다.이러한 메서드는 클라이언트에 의해 호출될 수 있으며 핵심 기능으로 [1]재정의 가능한 메서드입니다.템플릿 메서드 패턴과 밀접한 관련이 있는 패턴입니다.NVI 패턴은 하위 추상 메서드를 호출하는 비추상 메서드의 이점을 인식합니다.이 수준의 간접 조작을 통해 추상 조작과 관련된 사전 조작과 사후 조작을 즉시 실행할 수 있으며 미래의 예기치 않은 변경에도 대응할 수 있습니다.NVI 패턴은 매우 적은 소프트웨어 제작 및 런타임 비용으로 도입할 수 있습니다.많은 상용 소프트웨어 프레임워크는 NVI 패턴을 사용합니다.

장점과 단점

이 패턴에 준거한 설계에 의해 클래스인터페이스가2개의 다른 인터페이스로 분리됩니다.

  1. 클라이언트 인터페이스:이것은 퍼블릭 비가상 인터페이스입니다.
  2. 서브클래스 인터페이스:이것은 프라이빗인터페이스입니다.가상 방식과 비가상 방식을 조합하여 사용할 수 있습니다.

이러한 구조를 통해 취약한 기본 클래스 인터페이스 문제가 완화됩니다.유일한 단점은 코드가 [2]약간 확대된다는 것이다.

C#의 예

일반의 추상적인 학급 저장 가능 {     // 메서드의 불변 처리는 비가상 인터페이스에서 정의됩니다.     // 이렇게 정의된 동작은 모든 파생 클래스에서 상속됩니다.     // 예를 들어 트랜잭션 생성 및 커밋.     일반의 무효 절약하다()     {         콘솔.기입선("트랜잭션 생성 중");         코어 저장();         콘솔.기입선("트랜잭션 커밋 중");     }       // 메서드의 바리안트 처리는 서브 클래스인터페이스에 정의되어 있습니다.     // 이 동작은 서브클래스에서 필요에 따라 커스터마이즈할 수 있습니다.     // 예를 들어 데이터베이스에 데이터를 저장하는 특정 구현입니다.      보호되고 있다 추상적인 무효 코어 저장(); }     일반의 학급 고객. : 저장 가능 {     일반의 스트링 이름. { 얻다; 세트; }     일반의 십진수 신용 거래 { 얻다; 세트; }       보호되고 있다 덮어쓰다 무효 코어 저장()     {         콘솔.기입선("신용 한도 {1}을(를) 사용하여 {0} 고객을 저장했습니다.", 이름., 신용 거래);     } } 

[3][4]

「 」를 참조해 주세요.

레퍼런스

  1. ^ Carr, Richard (2011-09-03). "Non-Virtual Interface Design Pattern". BlackWasp. Archived from the original on 2011-09-03. Retrieved 2012-09-12. The non-virtual interface pattern is a design pattern that controls how methods in a base class are overridden. Base classes include public, non-virtual members that may be called by clients and a set of overridable methods containing core functionality.
  2. ^ Tambe, Sumant (2007-04-11). "Non-Virtual Interface (NVI) idiom and the design intent". C++ truths. Archived from the original on 2007-04-11. Retrieved 2012-09-12.
  3. ^ "Non-Virtual Interface Design Pattern". www.blackwasp.co.uk. Retrieved 2021-09-19.
  4. ^ "Non-Virtual Interface Design Pattern (Page 2 of 2)". www.blackwasp.co.uk. Retrieved 2021-09-19.

외부 링크