一、空对象模式
**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可能带来的问题。
学海无涯苦作舟!!!