空物件模式--- Pattern Null Object
模式的定義
空物件模式(Null Object Pattern)定義如下:
Provide an object as a surrogate for the lack of an object of a given type. The Null Object provides intelligent do nothing behavior, hiding the details from its collaborators.
UML類圖

20161117124923108.png
模式的簡單實現:
先定義一個AbstractObject類:
/** * 抽象類 */ public abstract class AbstractObject { public int id; public String name; //抽象方法 public abstract void doAction(); public abstract boolean isNull(); }
再定義一個實現類:ConcreteObject
public class ConcreteObject extends AbstractObject { public ConcreteObject(int id,String name) { super.id = id; super.name = name; } @Override public void doAction() { System.out.println("id:"+id+"--name:"+name+"---doAction()"); } @Override public boolean isNull() { return false; } }
我們再定義一個工廠方法類:ObjectFactory
/** * 生成物件 */ public class ObjectFactory { public static AbstractObject creator(int id) { AbstractObject result = null; switch (id) { case 1: result = new ConcreteObject(1, "hello"); break; case 2: result = new ConcreteObject(2, "world"); break; default: result = new NullObject(); break; } return result; } }
客戶端如下呼叫即可:
public class Main { public static void main(String[] args) { AbstractObject aObject = ObjectFactory.creator(1); aObject.doAction(); System.out.println("----------------------------"); aObject = ObjectFactory.creator(2); aObject.doAction(); System.out.println("----------------------------"); aObject = ObjectFactory.creator(-1); System.out.println("is null"+aObject.isNull()); aObject.doAction(); System.out.println("----------------------------"); } }
而在沒有采用此方式的情況下,我們需要在每次建立的時候做判空處理。