- 抽象对象
- AbstractBook书
- 空对象
- NullBook不存在的书
- 真对象
- RealBook存在的书
- 对象工厂
- BookFactory图书馆
- 测试
空对象模式属于行为型模式
它设计一个空对象取代null,
这样的null对象可以在数据不可用时提供默认的行为。
它包含抽象对象、空对象、真实对象、对象工厂四种角色。
抽象对象 AbstractBook书package com.example.duohoob.dp.nullobject;
public interface AbstractBook {
boolean isNull();
void info();
}
空对象
NullBook不存在的书
package com.example.duohoob.dp.nullobject;
public class NullBook implements AbstractBook {
@Override
public boolean isNull() {
// TODO Auto-generated method stub
return true;
}
@Override
public void info() {
// TODO Auto-generated method stub
System.out.println("不存在要找的书");
}
}
真对象
RealBook存在的书
package com.example.duohoob.dp.nullobject;
public class RealBook implements AbstractBook {
private String name;
private String author;
public RealBook(String name, String author) {
this.name = name;
this.author = author;
}
@Override
public boolean isNull() {
// TODO Auto-generated method stub
return false;
}
@Override
public void info() {
// TODO Auto-generated method stub
System.out.println(name + " ——" + author);
}
}
对象工厂
BookFactory图书馆
package com.example.duohoob.dp.nullobject;
public class BookFactory {
public AbstractBook getBook(String bookName) {
switch (bookName) {
case "笑傲江湖":
return new RealBook("笑傲江湖", "金庸");
case "钢铁是怎样炼成的":
return new RealBook("钢铁是怎样炼成的", "尼古拉•奥斯特洛夫斯基");
default:
break;
}
return new NullBook();
}
}
测试
package com.example.duohoob.dp.nullobject;
public class NullObjectTest {
public static void main(String[] args) {
// 对象工厂
BookFactory factory = new BookFactory();
// 天行健
AbstractBook txj = factory.getBook("天行健");
if (txj.isNull()) {
System.out.println("操作失败,详情:");
} else {
System.out.println("操作成功,详情:");
}
txj.info();
System.out.println();
// 笑傲江湖
AbstractBook xajh = factory.getBook("笑傲江湖");
if (xajh.isNull()) {
System.out.println("操作失败,详情:");
} else {
System.out.println("操作成功,详情:");
}
xajh.info();
}
}
运行



