【设计模式学习笔记】空对象模式

空对象模式:一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。【菜鸟】

文章目录

1.1 抽象对象及对应的继承类。

1.2 工厂

1.3 测试

1.4 结果

 当我们的系统中找不到某种车型的时候,直接返回对象肯定是个null。这时候如果你不做什么判断处理直接调用对象中的方法肯定是会不报错的。退一步说直接返回为空,是否有点暴力,太不人性化了。

1.1 抽象对象及对应的继承类。

这里我们搞了一个抽象对象,并用一个RealCar和NullCar继承它。当我们从工厂类中获取到对应的Car时就返回RealCar,获取不到就返回NullCar。

package nullobject;

import util.StringUtil;

/************************************************
 *@ClassName : AbstractCar
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 19:30】
 *@Version : 1.0.0
 *************************************************/

public abstract class AbstractCar {
    protected String name;
    public boolean isNull(){
        if(StringUtil.isEmpty(this.name)){
            return true;
        }else{
            return false;
        }
    }
    public abstract String getName();
}



package nullobject;

/************************************************
 *@ClassName : AbstractCar
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 19:30】
 *@Version : 1.0.0
 *************************************************/

public class NullCar extends AbstractCar{
    @Override
    public String getName() {
        return "dont have such car!";
    }
}

package nullobject;

/************************************************
 *@ClassName : AbstractCar
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 19:30】
 *@Version : 1.0.0
 *************************************************/

public class RealCar extends AbstractCar {
    @Override
    public String getName() {
        return "存在这辆车";
    }

    public RealCar(String name) {
        super.name = name;
    }
}

 1.2 工厂

package nullobject;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/************************************************
 *@ClassName : CarFactory
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 19:39】
 *@Version : 1.0.0
 *************************************************/

public class CarFactory {
    private static List<String> cars = new ArrayList<>();
    static {
        cars.add("bwm");
        cars.add("benz");
    }
    public static AbstractCar getCar(String name){
        Iterator<String> iterator = cars.iterator();
        while (iterator.hasNext()){
            if(name.equals(iterator.next())) {
                return new RealCar(name);
            }
        }
        return new NullCar();
    }
}



 1.3 测试

package nullobject;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 17:34】
 *@Version : 1.0.0
 *************************************************/

public class Test {
    public static void main(String[] args) {
        System.out.println(CarFactory.getCar("bwm").getName());
        System.out.println(CarFactory.getCar("asdfsa").getName());
    }
}

 1.4 结果

本文原文地址:https://blog.csdn.net/baidu_30325009/article/details/85028424 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值