空对象模式,这个模式怎么用?

2022-05-15  本文已影响0人  程就人生

空对象模式,还有这种模式?

空对象模式,应用在什么场景呢?

空对象模式(Null Object Pattern),通过一个空对象来返回默认行为,属于行为型模式。通过定义可以发现,它是一种非常简单的设计模式。

业务场景:通过空对象返回默认行为的业务场景。

关键代码:Null对象。

下面看UML类图:

类图说明:图中有三个类,AbstractCustomer是抽象类,RealCustomer和NullCustomer继承了AbstractCustomer,其中NullCustomer就是这个模式的核心,通过它来返回默认的行为。CustomerFactory类依赖AbstractCustmer类。三个类两种关系,继承和依赖。

下面看代码实现步骤:

1.客户抽象类;

/**
 * 1.客户抽象类
 * @author 程就人生
 * @Date
 */
public abstract class AbstractCustomer {
  // 名称
  protected String name;
  // 获取名称的抽象方法
  public abstract String getName();
  // 是否为null的抽象方法
  public abstract boolean isNil();
}

2.抽象类的继承者;

/**
 * 2.1 客户抽象类的继承者,真实客户的实现类
 * @author 程就人生
 * @Date
 */
public class RealCustomer extends AbstractCustomer{

  public RealCustomer(String name) {
    this.name = name;
  }

  @Override
  public String getName() {
    return name;
  }

  @Override
  public boolean isNil() {
    return false;
  }
}

/**
 * 2.2 客户抽象类的继承者,空对象,不存在时的返回值
 * @author 程就人生
 * @Date
 */
public class NullCustomer extends AbstractCustomer{

  @Override
  public String getName() {
    return "Not Available in Customer Database";
  }

  @Override
  public boolean isNil() {
    return true;
  }

}

3.客户工厂类;

public static void main(String[] argo){
    
    //输入一个不存在的名称    
    AbstractCustomer customer = CustomerFactory.getCustomer("feng");
    System.out.println("是否存在:" + customer.isNil());
    System.out.println(customer.getName());
    
    
    //输入一个存在的名称    
    customer = CustomerFactory.getCustomer("Rob");
    System.out.println("是否存在:" + customer.isNil());
    System.out.println(customer.getName());
}

4.测试代码;

public static void main(String[] argo){
    
    //输入一个不存在的名称    
    AbstractCustomer customer = CustomerFactory.getCustomer("feng");
    System.out.println("是否存在:" + customer.isNil());
    System.out.println(customer.getName());
    
    
    //输入一个存在的名称    
    customer = CustomerFactory.getCustomer("Rob");
    System.out.println("是否存在:" + customer.isNil());
    System.out.println(customer.getName());
}

运行结果:

是否存在:true
名称:Not Available in Customer Database
是否存在:false
Rob

这段代码的意思是:有一个客户工厂类,通过输入一个名称,用来确定这个名称在客户工厂类里是否存在。如果不存在时,就返回Null对象。这就是空对象模式的简单实现。

最后总结
空对象模式,通过空对象来返回默认行为,这是这个模式的核心。空对象模式的实现,还是比较简单的,也没有复杂的关系。甚至,它都不像一个正经的设计模式。当然,是否使用就看应用场景吧。

上一篇下一篇

猜你喜欢

热点阅读