博客
关于我
被遗忘的设计模式——空对象模式(转载)
阅读量: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出现 unknown encoding: idna 的处理方法
    查看>>
    Python出现 RuntimeError: dictionary changed size during iteration 的解决方法
    查看>>
    Python-numpy(2)数组的操作
    查看>>
    Python-Numpy的tile函数用法
    查看>>
    python-open函数
    查看>>
    Python-Pandas-将特定函数应用于给定级别-多索引数据框架
    查看>>
    python-queue队列通信
    查看>>
    python-ros No module named PyKDL
    查看>>
    python-social-auth 是否需要会话
    查看>>
    Python再获年度编程语言,微软或成最大赢家
    查看>>
    python-week5
    查看>>
    Python写表情包搜索工具(非常详细)零基础入门到精通,收藏这一篇就够了
    查看>>
    Python-【1】配置
    查看>>
    Python-从子文件夹执行绝对导入
    查看>>
    Python-刷新页面,直到元素可单击
    查看>>
    PYTHON-唤醒+VOSK+DEEPSEEK+离线合成-实现纯离线大模型问答
    查看>>
    Python-在Dash回调中重用函数
    查看>>
    PYTHON-基本数据类型-元祖类型,字典类型,集合类型
    查看>>
    python-外观模式
    查看>>
    Python-如何使用FastAPI和uvicorn.run而不阻塞线程?
    查看>>