前言
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来演示空对象模式的用法。
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 段落