Nemvirtuális interfész

A nemvirtuális interfész programtervezési minta (NVI) felügyeli, hogyan írják felül az osztályok valamelyik metódusát. Ezeket a metódusokat hívhatják a kliensek vagy a felülírható metódusok alap funkcionalitással.[1] A minta a sablon metódus közeli rokona. Ez a minta felhasználja annak az előnyét, hogy az ős nem absztrakt metódusai hívják az utód absztrakt metódusait. Az indirekciónak ez a szintje lehetővé teszi, hogy az absztrakt metódusokhoz képest előzetes (pre) és utólagos (post) metódusok alkalmazkodjanak a jövőbeli megjósolhatatlan változásokhoz. Kevés további munkával deployolható, és futásidőben sem túlzottan lassú. Több kereskedelmi keretrendszer is használja.

Előnyök és hátrányok szerkesztés

A nemvirtuális interfész alkalmazásához az osztály interfészét ketté kell bontani:

  • Kliens interfész: Publikus nem virtuális interfész.
  • Alosztály interfész: Nem publikus; virtuális és nem virtuális metódusok is lehetnek.

Ezzel a szerkezettel megoldható a törékeny alaposztály probléma. Az egyetlen ismert hátrány az, hogy a kód valamivel nagyobb lesz.[2]

Jegyzetek szerkesztés

  1. Non-Virtual Interface Design Pattern. BlackWasp, 2011. szeptember 3. [2012. szeptember 14-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. szeptember 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. Non-Virtual Interface (NVI) idiom and the design intent. C++ truths, 2007. április 11. [2013. szeptember 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. szeptember 12.)

Fordítás szerkesztés

Ez a szócikk részben vagy egészben a Non-virtual interface pattern című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.