设计模式(3)空对象设计模式
来源:互联网 发布:js文本框获得值 编辑:程序博客网 时间:2024/05/20 19:45
有时候我们的代码中为避免 NullPointerException 会出现很多的对Null的判断语句,而这些语句一旦多起来,我们的代码就会变的惨不忍睹,因此我们引入了空对象模式(Null Object Pattern)以此来使我们的代码变的更优雅一点.
第一步:创建一个抽象基类,代码如下:
package com.test;
/**
* 这是抽象基类
* @author 欧阳飘
*/
public abstract class AbstractCustomer {
protected String name;
public abstract boolean isNil();
public abstract String getName();
}
第二步:创建扩展上述类的具体类,其代码如下:
package com.test;
/**
* 真实存在的具体类
* @author 欧阳飘
*/
public class RealCustomer extends AbstractCustomer {
public RealCustomer(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
//判断是否是空对象
@Override
public boolean isNil() {
return false;
}
}
/**
* 空对象的具体类
* @author Administrator
*
*/
public class NullCustomer extends AbstractCustomer {
@Override
public String getName() {
return "这个对象是空对象";
}
//判断是否是空对象
@Override
public boolean isNil() {
return true;
}
}
第三步:创建一个CustomerFactory
类,其代码如下:
/**
*
* @author 欧阳飘
* 创建客户的工厂类:如果客户名称可以查询出来,那么就返回真实的对象,如果不存在那么就返回空客户对象
*/
public class CustomerFactory {
public static final String[] customNames = {"jack", "ouyang", "LaLa"};
public static AbstractCustomer getCustomer(String name){
for (int i = 0; i < customNames.length; i++) {
if (customNames[i].equalsIgnoreCase(name)){
return new RealCustomer(name);
}
}
return new NullCustomer();
}
}
第四步:创建演示Demo程序,运行结果如下图所示
通过上述我们得出空对象设计模式类图如下:
空对象设计模式的优点:
(1)它可以加强系统的稳固性,能有有效地防止空指针报错对整个系统的影响,使系统更加稳定。
(2)它能够实现对空对象情况的定制化的控制,能够掌握处理空对象的主动权。
(3)它并不依靠Client来保证整个系统的稳定运行。
(4)它通过isNull对==null的替换,显得更加优雅,更加易懂。
- 设计模式(3)空对象设计模式
- 设计模式(19)--空对象模式
- Java空对象设计模式
- 设计模式学习笔记--空对象模式
- 设计模式---空对象模式(C++实现)
- java设计模式之空对象模式
- 设计模式【空对象模式NullObjectPattern】
- 设计模式:空对象模式(Null Object Pattern)
- 【设计模式 - 21】之空对象模式(Null Object)
- 【设计模式】空对象模式(Null Object Pattern)
- [翻译]空对象设计模式(Null Object Design Pattern)
- 设计模式之空对象(Null Object)模式
- 设计模式笔记二十二:空对象模式
- PHP设计模式——无用的空对象模式
- java设计模式22_空对象模式
- 设计模式——空设计模式
- 被遗忘的设计模式——空对象模式(Null Object Pattern)
- 被遗忘的设计模式——空对象模式(Null Object Pattern)
- 【操作系统】第六章 进程同步
- 图像旋转
- STM32中的delay.c
- python日常练习(文件简单操作)
- 素数判定
- 设计模式(3)空对象设计模式
- 图像处理指令解析
- 猜运行数字游戏
- Ajax入门
- 转:贝索斯的分享
- Android屏幕适配
- windows--CMD命令详细大全
- 未找到与约束contractname Microsoft.VisualStudio.Utilities.IContentTypeRegistryService匹配的导出
- JAVA基础复习二十二-IO流-其它流