Az objektumorientált programozásban a Null Object egy bizonyos semleges („null”) viselkedésű objektum. A Null Object tervezési minta leírja az ilyen objektumok használatát és viselkedését (vagy annak hiányát). Először a Pattern Languages of Program Design könyvsorozatban jelent meg . [egy]
Az objektum-orientált nyelvekben , mint például a Java vagy a C# , az objektumok NULL értékűek lehetnek . Az ilyen objektumokra való hivatkozásokat használat előtt ellenőrizni kell, hogy nincs-e nulla, mivel a "null" objektumok osztályának metódusai általában nem hívhatók meg.
A Null-objektum célja egy objektum hiányának beágyazása oly módon, hogy egy másik objektummal helyettesíti, amely nem csinál semmit.
Ez a tervezési minta akkor javasolt, ha:
Az UML osztálydiagramjában a tervezési minta a következőképpen jelenik meg:
Példa a C# -ban
Forrásszöveg C# nyelven /* * Példa a Null Object minta használatára: */ voidMain ( ) { AbstractEntity realEntity = new RealEntity (); realEntity . doSomething (); // RealEntity::doSomething AbstractEntity unknownEntity = new NullEntity (); ismeretlen entitás . doSomething (); // nincs kimenet } // Itt definiálhat más metódusokat és osztályokat nyilvános absztrakt osztály AbstractEntity { public abstract void doSomething (); } nyilvános osztály RealEntity : AbstractEntity { nyilvános felülírás érvénytelen doSomething () { Konzol . WriteLine ( "RealEntity::doSomething" ); } } nyilvános osztály NullEntity : AbstractEntity { nyilvános felülírás érvénytelen doSomething () { // semmittevés } }Példa PHP -ben
PHP forráskód /* * Példa a Null Object minta használatára: */ deklarál ( szigorú_típusok = 1 ); névtér DesignPatterns \ Behavioral \ NullObject ; szolgáltatási osztály { public function __construct ( privát naplózó $ naplózó ) { } /** * csinálj valamit ... */ nyilvános funkció doSomething () { // itt vegyük észre, hogy nem kell ellenőrizni, hogy a logger be van-e állítva pl. is_null(), ehelyett csak használja $ this -> logger -> log ( ' Benne vagyunk ' . __METHOD__ ) ; } } /** * Főbb jellemzők: A NullLoggernek erről a felületről kell örökölnie, mint bármely más naplózónak */ interfész Logger { nyilvános függvénynapló ( string $ str ) ; } osztályú PrintLogger a Loggert valósítja meg { nyilvános függvénynapló ( string $ str ) _ { echo $ str ; } } osztály NullLogger a Loggert valósítja meg { nyilvános függvénynapló ( string $ str ) _ { // ne csinálj semmit } } $ servicePrint = új szolgáltatás ( új PrintLogger ()); $ servicePrint -> doSomething (); // 'A DesignPatterns\Behavioral\NullObject\Service::doSomething mappában vagyunk' $ serviceNull = új szolgáltatás ( new NullLogger ()); $ serviceNull -> doSomething (); // (ne csinálj semmit)Java példa
Java forrás /* * Pattern Null objektum. */ public class Fő { public static void main ( String [ ] args ) { AbstractEntity realEntity = new RealEntity (); realEntity . doSomething (); // RealEntity::doSomething AbstractEntity unknownEntity = new NullEntity (); ismeretlen entitás . doSomething (); // nincs kimenet } } absztrakt osztály _ _ public abstract void doSomething (); } class RealEntity kiterjeszti AbstractEntity { @Felülbírálás public void doSomething () { Rendszer . ki . println ( "RealEntity::doSomething" ); } } class NullEntity kiterjeszti AbstractEntity { @Felülbírálás public void doSomething () { } }Példa Pythonban
Forráskód Pythonban # Pattern Null objektum. osztály AbstractEntity : def doSomething ( self ): pass osztály RealEntity ( AbstractEntity ): def doSomething ( self ): print ( "RealEntity.doSomething" ) osztály NullEntity ( AbstractEntity ): def doSomething ( self ): pass def main (): real_entity = RealEntity () real_entity . csinálj valamit () unknown_entity = NullEntity () ismeretlen_entitás . csinálj valamit () if __name__ == "__main__" : fő ()Tervezési minták | |
---|---|
Fő | |
Generatív | |
Szerkezeti | |
Viselkedési | |
Párhuzamos programozás |
|
építészeti |
|
Java EE sablonok | |
Egyéb sablonok | |
Könyvek | |
Személyiségek |