空对象模式属于行为型模式
它设计一个空对象取代null,
这样的null对象可以在数据不可用时提供默认的行为。
它包含抽象对象、空对象、真实对象、对象工厂四种角色。
抽象对象
AbstractBook书
package com.example.duohoob.dp.nullobject;
/**
* 抽象对象-书
* @Title: AbstractBook.java
* @Package com.example.duohoob.dp.nullobject
*
* @author yangwei
* @date 2022年7月21日
*/
public interface AbstractBook {
boolean isNull();
void info();
}
空对象
NullBook不存在的书
package com.example.duohoob.dp.nullobject;
/**
* 空对象-不存在的书
* @Title: NullBook.java
* @Package com.example.duohoob.dp.nullobject
*
* @author yangwei
* @date 2022年7月21日
*/
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;
/**
* 真对象-存在的书
* @Title: RealBook.java
* @Package com.example.duohoob.dp.nullobject
*
* @author yangwei
* @date 2022年7月21日
*/
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;
/**
* 对象工厂-图书馆
* @Title: BookFactory.java
* @Package com.example.duohoob.dp.nullobject
*
* @author yangwei
* @date 2022年7月21日
*/
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;
/**
* @Title: NullObjectTest.java
* @Package com.example.duohoob.dp.nullobject
*
* @author yangwei
* @date 2022年7月21日
*/
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();
}
}
运行