设计模式之空对象(Null Object)模式

通过引用Null Object,用于取消业务逻辑中对对象的为空判断

类图:

Nullable:

package com.demo.user;

public interface Nullable {
	boolean isNull();
}

Group:

package com.demo.user;

public class Group implements Nullable{
	private int groupId;
	private String groupName;
	public int getGroupId() {
		return groupId;
	}
	public void setGroupId(int groupId) {
		this.groupId = groupId;
	}
	public String getGroupName() {
		return groupName;
	}
	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}
	public boolean isNull() {
		return true;
	}

}

NullGroup:

package com.demo.user;

public class NullGroup extends Group {

	private NullGroup() {
	}

	@Override
	public int getGroupId() {
		return 9999999;
	}
	@Override
	public boolean isNull() {
		return false;
	}
	static Group createNull(){
		return new NullGroup();
	}
}

User:

package com.demo.user;

public class User {
	private int userId ;
	private String userName;
	private Group group;

	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public Group getGroup() {
		//判断返回一个NullGroup对象
		return group==null?NullGroup.createNull():group;
	}
	public void setGroup(Group group) {
		this.group = group;
	}

}

UserService:

package com.demo.user;

public class UserService {
	public void add(User user){
		//获取groupId
		int  groupId=user.getGroup().getGroupId();
		//doing something
	}
}
时间: 2024-10-12 22:20:53

设计模式之空对象(Null Object)模式的相关文章

设计模式之美:Null Object(空对象)

索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Null Object 的示例实现. 意图 通过对缺失对象的封装,以提供默认无任何行为的对象替代品. Encapsulate the absence of an object by providing a substitutable alternative that offers suitable default do nothing behavior. In short, a design where "nothing w

敏捷软件开发 – NULL OBJECT模式

考虑以下代码 Employee e = Db.GetEmployee("Bob"); if(e != null && e.IsTimeToPay(today)) { e.Pay(); } 大多数人曾经由于忘记对null进行检查而受挫.该管用手法虽然常见,但却是丑陋且易出错的. 通过让Db.GetEmployee抛出一个异常而不是返回null,可以减少出错的可能性.不过,try/catch块对比null的检查更加丑陋. 可以使用NULL OBJECT模式来解决这些问题.通

(转)Java 中关于String的空对象(null) ,空值(empty),空格

原文出处:Java 中关于String的空对象(null) ,空值(empty),空格 定义 空对象: String s = null; 空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例化该对象,因此,空对象在调用所有对象方法时候都会抛出异常,如s.length(), s.isEmpty()等方法. 空值: String k = ""; 空值是指一个字符床对象已经实例化,即系统已经给该变量分配了空间,只是对象的内容为空. 空格: String n = " &qu

C# 设计模式之空对象模式

最近看了不少的书籍和视频等相关资料,决定自己边学习边写一下个人对设计模式的理解,如果有不对的请大家多多指正. 今天先说说我个人觉得最简单的设计模式 -- [空对象模式] 空对象模式可以减少客户端对对象判断是否为空的重复操作,也可以减少异常发生的情况[如果客户端调用程序忘记了检查对象是否为空,而直接访问对象中的数据,则有可能会报出异常,影响程序运行]. 废话不说了,先上我写的代码,下面是未运用空对象模式之前的示例代码: 要返回的实体代码,Person.cs: namespace NullObjec

【设计模式】空对象模式

在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查.Null 对象不是检查空值,而是反应一个不做任何动作的关系.这样的 Null 对象也可以在数据不可用的时候提供默认的行为. 在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方. 实现 我们将创建一个定义操作(在这里,是客户的名称)的 AbstractCustomer 抽象类,和扩展了 Abs

设计模式之空对象模式(php实现)

github地址:https://github.com/ZQCard/design_pattern /** * 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查. * Null 对象不是检查空值,而是反应一个不做任何动作的关系.这样的 Null 对象也可以在数据不可用的时候提供默认的行为. * 在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的

设计模式之空对象模式

空对象模式 空对象模式是通过实现一个默认的无意义对象来避免null值出现, 简单地说,就是为了避免在程序中出现null值判断而诞生的一种常用设计方法. 举个简单的例子, 一个听动物叫声的模拟程序: 动物代码: 听叫声的人: 现在我们想, 能不能把 animal 的空值判断去掉呢?我们增加一个 NullAnimal 类: 增加了NullAnimal类后, 在Person类中就不需要"animal != null"这句话了, 因为我们提供了一个实现接口的所有方法, 不会再产生null对象.

设计模式系列 - 空对象模式

空对象模式取代简单的 NULL 值判断,将空值检查作为一种不做任何事情的行为. 介绍 在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方. 类图描述 代码实现 1.定义抽象类 public abstract class AbstractCustomer { protected string Name; public abstract bool IsNil(); public abstrac

Null Object模式

去除代码中的if(obj==null),或者try/catch语句.维持Code的一致性. Null对象,代表"什么也不做"的一个对象. 使Null对象称为一个匿名内部类确保了该类只有单一实例.并且客户无法创建Null对象的其他实例.可以使用if(obj== Employee.Null)表达. [Agile Software Development(Principles,Patterns,and Pracitices)]