Java设计模式 _行为型模式_空对象模式

一、空对象模式

**1、空对象模式 **

空对象模式(Null Object Pattern)是一种行为型模式。 通过为使用一个空对象而不是直接使用 null,进而避免 null可能带来的问题,如 NullPointerException。这种模式的主要目标是简化空值检查,使代码更加健壮和易于理解。

2、实现思路

(1)、定义基础的抽象类

(2)、编写正常的实现类

(3)、编写空对象的实现类

(4)、定义对象工厂类,公国工厂产出对象,如果正常条件产出正常对象,非正常条件产出空对象

(5)、使用工厂生成的对象,无需校验是否为空。

二、代码示例

1、示例场景

狗工厂,不论是否存在该种类的狗都需要返回对象,正常条件返回正常狗,否则返回空狗。
2、代码示例

java 复制代码
// 1、定义抽象类(狗抽象类)
public abstract class Dog {
    protected String name;
    public abstract String getName();
    public abstract void setName(String name);
}
// 2.1、定义正常狗,正常实现方法
public class RealDog extends Dog {
    public RealDog(String name){
        this.name =name;
    }

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

    @Override
    public void setName(String name) {
        this.name = name;
    }
}
// 2.2、定义空狗,实现方法返回空字符串
public class NullDog extends Dog {
    @Override
    public String getName() {
        return "";
    }

    @Override
    public void setName(String name) {
    }
}
// 3、实现狗工厂,根据条件返回狗的对象
public class DogFactory {
    public String[] names = {"泰迪","俊介"};

    public Dog createDog(String name){
        for (String tempName:names){
            if (StringUtils.equals(tempName,name)){
                return new RealDog(name);
            }
        }
        return new NullDog();
    }
}
// 4、测试
 public static void main(String[] args) {
        DogFactory dogFactory = new DogFactory();
        List<Dog> dogList = new ArrayList<>();
        dogList.add(dogFactory.createDog("泰迪"));
        dogList.add(dogFactory.createDog("阿拉斯加"));
        dogList.add(dogFactory.createDog("俊介"));

        dogList.forEach(item -> {
            System.out.println(item.getName());
        });
    }

由上图可看到,返回空狗的对象不会存在空指针问题。

总结:

空对象模式,主要作用为防止空指针的出现。通过使用空对象来代替null的方式,避免了null可能带来的问题。

学海无涯苦作舟!!!

相关推荐
w_31234542 分钟前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安5 分钟前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA8 分钟前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_192849990615 分钟前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟32 分钟前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S43 分钟前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos1 小时前
c++------------------函数
开发语言·c++
越甲八千1 小时前
重温设计模式--享元模式
设计模式·享元模式
yuanbenshidiaos1 小时前
C++----------函数的调用机制
java·c++·算法
程序员_三木1 小时前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js