空对象模式,这个模式怎么用?
2022-05-15 本文已影响0人
程就人生
空对象模式,还有这种模式?
空对象模式,应用在什么场景呢?
空对象模式(Null Object Pattern),通过一个空对象来返回默认行为,属于行为型模式。通过定义可以发现,它是一种非常简单的设计模式。
业务场景:通过空对象返回默认行为的业务场景。
关键代码:Null对象。
下面看UML类图:
类图说明:图中有三个类,AbstractCustomer是抽象类,RealCustomer和NullCustomer继承了AbstractCustomer,其中NullCustomer就是这个模式的核心,通过它来返回默认的行为。CustomerFactory类依赖AbstractCustmer类。三个类两种关系,继承和依赖。
下面看代码实现步骤:
1.客户抽象类;
/**
* 1.客户抽象类
* @author 程就人生
* @Date
*/
public abstract class AbstractCustomer {
// 名称
protected String name;
// 获取名称的抽象方法
public abstract String getName();
// 是否为null的抽象方法
public abstract boolean isNil();
}
2.抽象类的继承者;
/**
* 2.1 客户抽象类的继承者,真实客户的实现类
* @author 程就人生
* @Date
*/
public class RealCustomer extends AbstractCustomer{
public RealCustomer(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
@Override
public boolean isNil() {
return false;
}
}
/**
* 2.2 客户抽象类的继承者,空对象,不存在时的返回值
* @author 程就人生
* @Date
*/
public class NullCustomer extends AbstractCustomer{
@Override
public String getName() {
return "Not Available in Customer Database";
}
@Override
public boolean isNil() {
return true;
}
}
3.客户工厂类;
public static void main(String[] argo){
//输入一个不存在的名称
AbstractCustomer customer = CustomerFactory.getCustomer("feng");
System.out.println("是否存在:" + customer.isNil());
System.out.println(customer.getName());
//输入一个存在的名称
customer = CustomerFactory.getCustomer("Rob");
System.out.println("是否存在:" + customer.isNil());
System.out.println(customer.getName());
}
4.测试代码;
public static void main(String[] argo){
//输入一个不存在的名称
AbstractCustomer customer = CustomerFactory.getCustomer("feng");
System.out.println("是否存在:" + customer.isNil());
System.out.println(customer.getName());
//输入一个存在的名称
customer = CustomerFactory.getCustomer("Rob");
System.out.println("是否存在:" + customer.isNil());
System.out.println(customer.getName());
}
运行结果:
是否存在:true
名称:Not Available in Customer Database
是否存在:false
Rob
这段代码的意思是:有一个客户工厂类,通过输入一个名称,用来确定这个名称在客户工厂类里是否存在。如果不存在时,就返回Null对象。这就是空对象模式的简单实现。
最后总结
空对象模式,通过空对象来返回默认行为,这是这个模式的核心。空对象模式的实现,还是比较简单的,也没有复杂的关系。甚至,它都不像一个正经的设计模式。当然,是否使用就看应用场景吧。