设计模式(3)空对象设计模式

来源:互联网 发布:js文本框获得值 编辑:程序博客网 时间:2024/05/20 19:45

    有时候我们的代码中为避免 NullPointerException 会出现很多的对Null的判断语句,而这些语句一旦多起来,我们的代码就会变的惨不忍睹,因此我们引入了空对象模式(Null Object Pattern)以此来使我们的代码变的更优雅一点.

第一步:创建一个抽象基类,代码如下

package com.test;
/**
 * 这是抽象基类
 * @author 欧阳飘
 */
public abstract class AbstractCustomer {
   protected String name;
   public abstract boolean isNil();
   public abstract String getName();
}



第二步:创建扩展上述类的具体类,其代码如下:

package com.test;
/**
 * 真实存在的具体类
 * @author 欧阳飘
 */
public class RealCustomer extends AbstractCustomer {
   public RealCustomer(String name) {
      this.name = name;
   }
   @Override
   public String getName() {
      return name;
   }
   //判断是否是空对象
   @Override
   public boolean isNil() {
      return false;
   }
}

/**
 * 空对象的具体类
 * @author Administrator
 *
 */
public class NullCustomer extends AbstractCustomer {
   @Override
   public String getName() {
      return "这个对象是空对象";
   }
   //判断是否是空对象
   @Override
   public boolean isNil() {
      return true;
   }
}



第三步:创建一个CustomerFactory类,其代码如下:

/**
 * 
 * @author 欧阳飘
 * 创建客户的工厂类:如果客户名称可以查询出来,那么就返回真实的对象,如果不存在那么就返回空客户对象
 */
public class CustomerFactory {
   public static final String[] customNames = {"jack", "ouyang", "LaLa"};
   public static AbstractCustomer getCustomer(String name){
      for (int i = 0; i < customNames.length; i++) {
         if (customNames[i].equalsIgnoreCase(name)){
            return new RealCustomer(name);
         }
      }
      return new NullCustomer();
   }
}

第四步:创建演示Demo程序,运行结果如下图所示


通过上述我们得出空对象设计模式类图如下:



空对象设计模式的优点:

(1)它可以加强系统的稳固性,能有有效地防止空指针报错对整个系统的影响,使系统更加稳定。
(2)它能够实现对空对象情况的定制化的控制,能够掌握处理空对象的主动权。
(3)它并不依靠Client来保证整个系统的稳定运行。
(4)它通过isNull对==null的替换,显得更加优雅,更加易懂。





















原创粉丝点击