设计模式之空对象模式(Null Object Pattern)

设计模式之空对象模式(Null Object Pattern)

存在有道理

  1. 痛点

    class User {
    	public String show(){
    		return "show"
    	}
    }
    public  static String show(User user){
    	if(null!=user)
    		return user.show()
    	return null;
    }
    

    如上的代码我们每天都在写,避免空指针错误
    思考,如果我能保证对象不为空呢,或者为空得时候也是一个特殊得对象,并且有一个最低得方法实现呢,这样,我就不需要到处写空置判断呢,这里应该要配合工厂模式,或者建造者模式,保证生成得对象一定存在

解决方案

空对象模式

  1. 结构图
    在这里插入图片描述

  2. 用特殊对象表示空的情况,并且实现对应的方法,这样特殊空情况也能执行方法,这样就不需要判断是否为空了,需要一个生成对象得三种中介类,一般工厂模式等

  3. 上代码

public class NullObjectPattern {

    public static void main(String[] args) {
        //--------------平时我们正常使用得时候--------
        DriverFactory factory = new DriverFactory();
        Driver driver = factory.normal("cuowude");//传一个错误类型进去
        if (null != driver) {
            driver.drive();
        }


        ---------空对象模式----------------
        DriverFactory nullObjectFactory=new DriverFactory();
        Driver nullObjectDriver=factory.getNullObject("error");
        nullObjectDriver.drive();//这里不需要做任何空指针判断,因为对象一定不会为空

    }

}

interface Driver {

    String PERSION_TYPE = "persion";
    String DOG_TYPE = "dog";

    void drive();
}

class PersonDriver implements Driver {

    @Override
    public void drive() {
        System.out.println("Persion drive");
    }
}

class DogDriver implements Driver {

    @Override
    public void drive() {
        System.out.println("Dog drive");
    }
}

class NullDriver implements Driver {

    @Override
    public void drive() {
        System.out.println("Null drive");
    }
}

class DriverFactory {

    public Driver normal(String driverType) {
        switch (driverType) {
            case Driver.PERSION_TYPE:
                return new PersonDriver();
            case Driver.DOG_TYPE:
                return new DogDriver();
        }
        return null;
    }

    public Driver getNullObject(String driverType) {
        switch (driverType) {
            case Driver.PERSION_TYPE:
                return new PersonDriver();
            case Driver.DOG_TYPE:
                return new DogDriver();
        }
        return new NullDriver();
    }
}

  1. 运行结果
    在这里插入图片描述

  2. 代码gitee地址:空对象模式demo

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值