/** AbstractObject */publicinterfaceShape2D{voidmove(doublex,doubley);}/** RealObject */publicclassCircleimplementsShape2D{@Overridepublicvoidmove(doublex,doubley){System.out.println("Shape has been moved by vector("+x+","+y+")");}}/** NullObject */publicclassNullShape2DimplementsShape2D{@Overridepublicvoidmove(doublex,doubley){// do nothing}}/** Client program */publicclassNullObjectExample{publicstaticvoidmain(String[]args){Shape2D[]shapes={newNullShape2D(),newCircle(),newNullShape2D(),newCircle()};/* zamiast za każdym razem sprawdzać warunek, czy referencja posiada wartość pustą *for (int i = 0; i < shapes.length; i++) { * if (shapes[i] != null) { * shapes[i].move(i, i); * } *} * Stosuje się wzorzec Pusty Obiekt */for(inti=0;i<shapes.length;i++){shapes[i].move(i,i);}}}
usingSystem;/** AbstractObject */interfaceIAnimal{voidMakeSound();}/** RealObject */classDog:IAnimal{publicvoidMakeSound(){Console.WriteLine("Woof!");}}/** NullObject */classNullAnimal:IAnimal{publicvoidMakeSound(){// Purposefully provides no behaviour.}}/** Client program */staticclassProgram{staticvoidMain(){IAnimaldog=newDog();dog.MakeSound();// outputs "Woof!"/* Instead of using C# null, use a NullAnimal instance. * This example is simplistic but conveys the idea that if a NullAnimal instance is used then the program * will never experience a .NET System.NullReferenceException at runtime, unlike if C# null was used. */IAnimalunknown=newNullAnimal();//<< replaces: IAnimal unknown = null;unknown.MakeSound();// outputs nothing, but does not throw a runtime exception }}