空对象模式(Null Object Pattern)
Null Object Pattern,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。
package com.xxx;
/**
* @Description 1.定义一个抽象类
* 空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。
* 为什么使用这个模式?还需要null吗?
* 这个模式可以消除重复。如果多个地方要判空。
* 空对象模式是通过实现一个默认的无意义对象来避免null值出现, 简单地说,就是为了避免在程序中出现null值判断而诞生的一种常用设计方法.
* 另外一个好处就是方便做测试,
* * 增加了NullUser类后, 在User类中就不需要"user != null"这句话了, 因为我们提供了一个实现接口的所有方法, 不会再产生null对象. 想象一个web项目中, user对象可能由MVC框架映射产生, 我们只要定义一个默认的映射对象是NullUser, 就可以解决控制判断的问题, 提升代码的可读性. 这就是空对象模式, 非常简单, 但非常实用.
*/public abstract class AbstractUser {
protected String name;
/**
* 是否为null
* @return
*/
public abstract boolean isNil();
/**
* 获取名字
* @return
*/
public abstract String getName();
}
package com.xxx;
import com.qf.AbstractCustomer;
/**
* @Description 2.继承扩展,真实用户
*/public class RealUser extends AbstractUser {
public RealUser(String name){
this.name = name;
}
@Override
public boolean isNil() {
return false;
}
@Override
public String getName() {
return name;
}
}
package com.xxx;
import com.qf.AbstractCustomer;
/**
* @Description 3.继承扩展,空用户
*/public class NullUser extends AbstractUser {
@Override
public boolean isNil() {
return true;
}
@Override
public String getName() {
return "空";
}
}
package com.xxx;
/**
* @Description 4.创建用户工厂
*/public class UserFactory {
public static final String[] names = {"张三", "李四", "王五"};
public static AbstractUser getUser(String name){
for (int i = 0; i < names.length; i++) {
if (names[i].equalsIgnoreCase(name)) {
return new RealUser(name);
}
} return new NullUser();
}
}
package com.xxx;
/**
* @Description 5.通过名字,来获取 RealUser 或 NullUser 对象。
*/public class Test {
public static void main(String[] args) {
AbstractUser lisi = UserFactory.getUser("李四");
AbstractUser lufei = UserFactory.getUser("路飞");
System.out.println(lisi.getName());
System.out.println(lufei.getName());
}
}
标签:return,String,对象,模式,Null,public,name
From: https://www.cnblogs.com/wang-zeyu/p/17070087.html