博客
关于我
被遗忘的设计模式——空对象模式(转载)
阅读量:428 次
发布时间:2019-03-06

本文共 1721 字,大约阅读时间需要 5 分钟。

Null Object Pattern是一种设计模式,用于处理空对象的情况,使得程序更加稳定和用户友好。以下是对该模式的详细分析和优化后的代码解释:

Null Object Pattern分析

Null Object Pattern的主要思想是创建一个空对象(Null Object),来代替null,这样可以避免空指针异常,并让程序更加稳定。通过这种方式,系统能够更好地处理空对象的情况,并提供友好的提示给用户。

核心优势:

  • 稳定性:减少空指针异常,提高系统稳定性。
  • 主动权:系统掌握处理空对象的主动权,避免依赖客户端。
  • 用户体验:可以定制提示信息,提升用户体验。
  • 优化后的代码解释

    接口定义:

    interface Book {    boolean isNull();    void show();}

    空对象类:

    public class NullBook implements Book {    public boolean isNull() {        return true;    }    public void show() {        System.out.println("Sorry,未找到符合您输入的ID的图书信息,请确认您输入的不是非法值。");    }}

    具体实现类:

    public class ConcreteBook implements Book {    private int ID;    private String name;    private String author;    public ConcreteBook(int ID, String name, String author) {        this.ID = ID;        this.name = name;        this.author = author;    }    public void show() {        System.out.println(ID + "**" + name + "**" + author);    }    public boolean isNull() {        return false;    }}

    工厂类:

    public class BookFactory {    public Book getBook(int ID) {        Book book;        switch (ID) {            case 1:                book = new ConcreteBook(1, "设计模式", "GoF");                break;            case 2:                book = new ConcreteBook(2, "被遗忘的设计模式", "Null Object Pattern");                break;            default:                book = new NullBook();                break;        }        return book;    }}

    客户端代码:

    public class Client {    public static void main(String[] args) {        BookFactory bookFactory = new BookFactory();        Book book = bookFactory.getBook(-1);        book.show();    }}

    运行结果

    运行时,客户端将输出友好的提示信息,而不会抛出空指针异常。

    总结

    Null Object Pattern通过引入一个空对象,解决了空指针问题,使系统更加稳定且用户友好。它将主动权放在系统内部,减少了对客户端的依赖,是一个值得在实际开发中使用的设计模式。

    转载地址:http://vliuz.baihongyu.com/

    你可能感兴趣的文章
    Python:字典思维
    查看>>
    Python:将 HEX 字符串转换为字节
    查看>>
    Python:将列表与范围列表合并
    查看>>
    Python:将列表列表初始化为一定大小,
    查看>>
    Python:带有生成器的给定集合的幂集
    查看>>
    Python:按字符的位置拆分字符串
    查看>>
    Python:替换嵌套字典中的值
    查看>>
    Python:爬取数据出现response.status_code为403解决方法
    查看>>
    Python:爬取数据出现response.status_code为418解决方法
    查看>>
    Python:生成“元组集“;来自“元组列表“;不考虑顺序
    查看>>
    Python:生成具有趋势的随机时间序列数据(例如周期性、指数衰减等)
    查看>>
    Python:用渐进式数字重命名列表中的重复项而不对列表进行排序
    查看>>
    Python:矩形参数无效
    查看>>
    Python:语法进阶
    查看>>
    Python:调用复制函数时调用 Python 对象时超出了最大递归深度
    查看>>
    Python:这两个 import 语句有什么区别?
    查看>>
    Python:通过串口从 Velleman k8090 读取数据
    查看>>
    python:遍历具有列表值的字典
    查看>>
    Python:降低精度 pandas 时间戳数据帧
    查看>>
    python:非阻塞子进程,检查标准输出
    查看>>