V objektově orientovaném programování je objekt Null objekt s určitým neutrálním ("null") chováním. Návrhový vzor Null Object popisuje použití takových objektů a jejich chování (nebo jeho nedostatek). Poprvé publikováno v knižní sérii Pattern Languages of Program Design . [jeden]
V objektově orientovaných jazycích , jako je Java nebo C# , mohou mít objekty hodnotu NULL . Odkazy na takové objekty je třeba před použitím zkontrolovat na hodnotu null, protože metody třídy "null" objektu obecně nelze volat.
Účelem nulového objektu je zapouzdřit nepřítomnost objektu jeho nahrazením jiným objektem, který nic nedělá.
Tento návrhový vzor se doporučuje, když:
V diagramu tříd v UML je návrhový vzor reprezentován následovně:
Příklad v C#
Zdrojový text v C# /* * Příklad použití vzoru Null Object: */ voidMain ( ) { AbstractEntity realEntity = new RealEntity (); realita . udělat něco (); // RealEntity::doSomething AbstractEntity unknownEntity = new NullEntity (); neznámáEntita . udělat něco (); // žádný výstup } // Zde definujte další metody a třídy veřejná abstraktní třída AbstractEntity { public abstract void doSomething (); } public class RealEntity : AbstractEntity { veřejné přepsání void doSomething () { Konzole . WriteLine ( "RealEntity::doSomething" ); } } public class NullEntity : AbstractEntity { veřejné přepsání void doSomething () { // nicnedělání } }Příklad v PHP
Zdrojový kód PHP /* * Příklad použití vzoru Null Object: */ deklarovat ( strict_types = 1 ); jmenný prostor DesignPatterns \ Behavioral \ NullObject ; servisní třída { veřejná funkce __construct ( soukromý Logger $ logger ) { } /** * dělej něco ... */ veřejná funkce udělat něco () { // zde si všimněte, že nemusíte kontrolovat, zda je logger nastaven např. is_null(), místo toho ji použijte $ this -> logger -> log ( ' Jsme v ' . __METHOD__ ) ; } } /** * Klíčová vlastnost: NullLogger musí dědit z tohoto rozhraní jako každý jiný logger */ rozhraní Logger { veřejný log funkce ( string $ str ); } třída PrintLogger implementuje Logger { veřejný protokol funkcí ( string $ str ) { echo $ str ; } } class NullLogger implementuje Logger { veřejný protokol funkcí ( string $ str ) { // nedělat nic } } $ servicePrint = nová služba ( new PrintLogger ()); $ servicePrint -> doSomething (); // 'Jsme v DesignPatterns\Behavioral\NullObject\Service::doSomething' $ serviceNull = nová služba ( new NullLogger ()); $ serviceNull -> doSomething (); // (nedělat nic)Příklad Java
Zdroj Java /* * Objekt Pattern Null. */ public class Hlavní { public static void main ( String [] args ) { AbstractEntity realEntity = new RealEntity (); realita . udělat něco (); // RealEntity::doSomething AbstractEntity unknownEntity = new NullEntity (); neznámáEntita . udělat něco (); // žádný výstup } } abstraktní třída _ _ public abstract void doSomething (); } class RealEntity rozšiřuje AbstractEntity { @Přepsat public void doSomething () { Systém . ven . println ( "RealEntity::doSomething" ); } } class NullEntity rozšiřuje AbstractEntity { @Přepsat public void doSomething () { } }Příklad v Pythonu
Zdrojový kód v Pythonu # Pattern Null objekt. třída AbstractEntity : def doSomething ( sebe ): složit třída RealEntity ( AbstractEntity ): def doSomething ( sebe ): tisknout ( "RealEntity.doSomething" ) třída NullEntity ( AbstractEntity ): def doSomething ( sebe ): složit def main (): real_entity = RealEntity () skutečná_entita . udělat něco () neznáma_entita = NullEntity () neznámá_entita . udělat něco () if __name__ == "__main__" : hlavní ()Designové vzory | |
---|---|
Hlavní | |
Generativní | |
Strukturální | |
Behaviorální | |
Paralelní programování |
|
architektonický |
|
Java EE šablony | |
Jiné šablony | |
knihy | |
Osobnosti |