美文网首页
空对象模式,这个模式怎么用?

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

作者: 程就人生 | 来源:发表于2022-05-15 09:27 被阅读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对象。这就是空对象模式的简单实现。

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

    相关文章

      网友评论

          本文标题:空对象模式,这个模式怎么用?

          本文链接:https://www.haomeiwen.com/subject/petqurtx.html