创建一个abstractcustomer抽象类:
package com.cy;
/*
定义一个抽象类
*/
public abstract class AbstractCustomer {
public String name;
//是否是空值
public abstract boolean isNil();
//获取名称
public abstract String getName();
}
创建了上述类的实体类:
package com.cy;
/*
表示目标要操作的对应类
*/
public class RealCustomer extends AbstractCustomer{
public RealCustomer(String name) {
this.name=name;//在初始化对象的时候将name的属性对应的值一并初始化
}
@Override
public boolean isNil() {
return false;
}
@Override
public String getName() {
return name;
}
}
创建了上述类的实体类:
package com.cy;
/*
过渡
*/
public class NullCustomer extends AbstractCustomer{
@Override
public boolean isNil() {
return true;//是空值
}
@Override
public String getName() {
return "没有定义当前的对象";
}
}
创建customerfactory类:
package com.cy;
public class CustomerFactory {
private static final String[] names={"TOM","JACK","COCO"};
//定义一个方法,根据用户传递的名称来判断当前是否存在此客户
//如果不存在,则抛出指定空对象
public static AbstractCustomer getCostomer(String name){
for(int i=0;i< names.length;i++){
//如果if成立,则表示目标访问的对象存在,即realcostomer对象存在,直接new
if(names[i].equalsIgnoreCase(name)){
return new RealCustomer(name);
}
}
return new NullCustomer();//彻底避免了null对象的产生
}
}
创建nullpatterndemo类,使用coustomerFactory,基于客户传递的名字,来获取realcustomer或nullcostomer对象
package com.cy;
public class NullObjectPattern {
public static void main(String[] args) {
AbstractCustomer customer= CustomerFactory.getCostomer("TOM");
System.out.println(customer.getName());
AbstractCustomer c2=CustomerFactory.getCostomer("111");
System.out.println(c2.getName());
}
}
输出
在空对象模式中,一个空对象取代null对象实例的检查,
实现
我们将创建一个定义操作的abstractcustomer抽象类,和扩展了abstractcustomer的实体类,工厂类基于客户传递的名字来返回Realcustomer和Nullcostomer对象