空对象模式【Java设计模式】

前言


2022/9/25 18:56
2022/9/25 19:19
路漫漫其修远兮,吾将上下而求索


本文是根据袁庭新老师学习所做笔记

仅供学习交流使用,转载注明出处


推荐

袁庭新老师-视频:​​【Java设计模式】23种Java设计模式,全网最全精讲版本,熬夜爆肝也要学完​​【10:06:48】

狂神老师-笔记:​​设计模式【java提高】​

空对象模式

在空对象模式(Null Object Pattern)中,一个空对象取代NULL对象实例的检查。Null对象不是检查空值,而是反应一个不做任何动作的关系。这样的NULL对象也可以在数据不可用的时候提供默认的行为。

在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。

实现

我们将创建一个定义操作(在这里,是客户的名称)的AbstractCustomer抽象类,和扩展了AbstractCustomer类的实体类。工厂类CustomerFactory基于客户传递的名字来返回RealCustomer或NullCustomer对象。

NullatternDemo,我们的演示类使用CustomerFactory来演示空对象模式的用法。

空对象模式【Java设计模式】_抽象类

1.创建一个项目名称为null_object_pattern的Java项目。

2.创建一个AbstractCustomer抽象类。

package com.js;

/**
* 定义一个抽象类
*/
public abstract class AbstractCustomer {
public String name;

//是否是空值
public abstract boolean isNil();

//获取名称
public abstract String getName();

}

3.创建上述类的实现类

package com.js;

/**
* 表示目标要操作的类
*/
public class RealCustomer extends AbstractCustomer{

public RealCustomer(String name) {
this.name=name;
}

@Override
public boolean isNil() {
return false;
}

@Override
public String getName() {
return name;
}
}
package com.js;

public class NullCustomer extends AbstractCustomer{
@Override
public boolean isNil() {
return true;//是空值
}

@Override
public String getName() {
return "没有定义当前的对象";
}
}

4.创建工厂

package com.js;

public class CustomerFactory {
private static final String[] names={"tom","jack","coco"};

//定义一个方法,根据用户传递的名称来判断当前是否存在此客户
//如果不存在,则抛出指定空对象(NullCustomer)
public static AbstractCustomer getCustomer(String name){
for (int i = 0; i < names.length; i++) {
//如果if成立,则表示目标访问的对象存在(RealCustomer)
if (names[i].equalsIgnoreCase(name)){
return new RealCustomer(name);
}
}
return new NullCustomer();//彻底避免Null对象的产生
}
}

5.编写客户端

package com.js;

public class NullObjectPattern {
public static void main(String[] args) {
AbstractCustomer c1 = CustomerFactory.getCustomer("tom");
System.out.println(c1.getName());

AbstractCustomer c2 = CustomerFactory.getCustomer("marry");
System.out.println(c2.getName());

}
}

6.结果

tom
没有定义当前的对象

最后


2022/9/25 20:12


p15


Markdown 2109 字数 163 行数
HTML 1834 字数 90 段落