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

简介: 空对象模式【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来演示空对象模式的用法。


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 段落

相关文章
|
2天前
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
15 8
|
1天前
|
安全 Java 程序员
在Java中,finalization是一种机制,允许对象在被垃圾收集器回收之前执行一些清理操作。
【6月更文挑战第24天】Java中的finalization机制允许对象在被垃圾收集前执行清理,以释放系统资源或处理敏感信息。`finalize()`方法用于定义此类操作,但它不是可靠的资源管理策略,因为调用时机不确定且可能影响性能。尽管可用于清理外部资源或作为保护措施,但应避免依赖finalization,而应优先采用手动资源管理,遵循“创建者负责”原则。
8 1
|
14小时前
|
设计模式 Java 机器人
探索Java中的设计模式:从单例到工厂模式
探索Java中的设计模式:从单例到工厂模式
|
15小时前
|
设计模式 安全 Java
Java中常见的设计模式及应用场景
Java中常见的设计模式及应用场景
|
15小时前
|
Java
java反射-获取类的Class对象方式
java反射-获取类的Class对象方式
3 0
|
17小时前
|
存储 Java 数据库连接
深入探索Hibernate与JPA:Java对象与数据库表的桥梁
【6月更文挑战第25天】Java ORM如Hibernate和JPA简化了数据库交互。在电商系统案例中,JPA注解如`@Entity`、`@Table`、`@Id`定义了对象-表映射。Hibernate利用这些定义实现持久化,如`Session.save()`保存用户对象至数据库,降低了复杂性并提升了开发效率。
|
1天前
|
设计模式 Java
Java中设计模式及举例代码
Java中设计模式及举例代码
|
1天前
|
设计模式 安全 Java
Java中常见的设计模式及应用场景
Java中常见的设计模式及应用场景
|
1天前
|
设计模式 Java
探索Java中的设计模式:从单例到工厂模式
探索Java中的设计模式:从单例到工厂模式
|
1月前
|
设计模式 Java API
【设计模式】JAVA Design Patterns——Combinator(功能模式)
【设计模式】JAVA Design Patterns——Combinator(功能模式)