设计模式-空对象模式



空对象模式属于行为型模式

它设计一个空对象取代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();
	}
	
}

运行

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值