博客
关于我
被遗忘的设计模式——空对象模式(转载)
阅读量: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/

    你可能感兴趣的文章
    Python3之打印操作打印流重定向(下)
    查看>>
    python3判断字典、列表、元组为空以及字典是否存在某个key的方法
    查看>>
    Python3利用pymysql操作 MySQL
    查看>>
    python3处理json文件中含有中文dumps的应用
    查看>>
    Python3子进程输出
    查看>>
    Python3学习笔记3,变量、运算符
    查看>>
    Python3学习笔记(urllib模块的使用)
    查看>>
    python3安装scapy_Linux下安装scapy-python3
    查看>>
    python3实现socket通信
    查看>>
    Python关于numpy.transpose函数详细解析附代码
    查看>>
    Python3导入自定义模块的3种方式
    查看>>
    python3打开txt文件_使用Python 3从文本文件读取句子并添加到列表中
    查看>>
    python3爬虫抓取智联招聘职位信息代码
    查看>>
    Python3爬虫数据入数据库---把爬取到的数据存到数据库,带数据库去重功能
    查看>>
    python3的 pymysql把mysqldb库取代了,让python 3支持mysqldb的解决方法
    查看>>
    Python3笔记——IDE的选择
    查看>>
    python3简单使用requests 用户代理,cookie池
    查看>>
    Python3组播通信编程实现教程(发送者+接收者)
    查看>>
    Python3编写网络爬虫10-数据存储方式三-CSV文件存储
    查看>>
    python3读取redis返回数据带有'b'的问题
    查看>>