首页 > 其他分享 >空对象模式

空对象模式

时间:2023-01-28 12:22:42浏览次数:23  
标签:return String 对象 模式 Null public name

空对象模式(Null Object Pattern)

Null Object Pattern,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。

package com.xxx;  
  
/**  
 * @Description 1.定义一个抽象类  
 * 空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。  
 * 为什么使用这个模式?还需要null吗?  
 * 这个模式可以消除重复。如果多个地方要判空。  
 * 空对象模式是通过实现一个默认的无意义对象来避免null值出现, 简单地说,就是为了避免在程序中出现null值判断而诞生的一种常用设计方法.  
 * 另外一个好处就是方便做测试,  
 * * 增加了NullUser类后, 在User类中就不需要"user != null"这句话了, 因为我们提供了一个实现接口的所有方法, 不会再产生null对象. 想象一个web项目中, user对象可能由MVC框架映射产生, 我们只要定义一个默认的映射对象是NullUser, 就可以解决控制判断的问题, 提升代码的可读性. 这就是空对象模式, 非常简单, 但非常实用.   
 */public abstract class AbstractUser {  
    protected String name;  
  
    /**  
     * 是否为null  
     * @return  
     */  
    public abstract boolean isNil();  
  
    /**  
     * 获取名字  
     * @return  
     */  
    public abstract String getName();  
}

package com.xxx;  
  
import com.qf.AbstractCustomer;  
  
/**  
 * @Description 2.继承扩展,真实用户  
 */public class RealUser extends AbstractUser {  
  
    public RealUser(String name){  
        this.name = name;  
    }  
    @Override  
    public boolean isNil() {  
        return false;  
    }  
  
    @Override  
    public String getName() {  
        return name;  
    }  
}
package com.xxx;  
  
import com.qf.AbstractCustomer;  
  
/**  
 * @Description 3.继承扩展,空用户    
 */public class NullUser extends AbstractUser {  
    @Override  
    public boolean isNil() {  
        return true;  
    }  
  
    @Override  
    public String getName() {  
        return "空";  
    }  
}

package com.xxx;  
  
  
/**  
 * @Description 4.创建用户工厂  
 */public class UserFactory {  
    public static final String[] names = {"张三", "李四", "王五"};  
  
    public static AbstractUser getUser(String name){  
        for (int i = 0; i < names.length; i++) {  
            if (names[i].equalsIgnoreCase(name)) {  
                return new RealUser(name);  
            }  
        }        return new NullUser();  
    }  
}

package com.xxx;  
  
/**  
 * @Description 5.通过名字,来获取 RealUser 或 NullUser 对象。   
 */public class Test {  
    public static void main(String[] args) {  
        AbstractUser lisi = UserFactory.getUser("李四");  
        AbstractUser lufei = UserFactory.getUser("路飞");  
  
        System.out.println(lisi.getName());  
        System.out.println(lufei.getName());  
    }  
}

标签:return,String,对象,模式,Null,public,name
From: https://www.cnblogs.com/wang-zeyu/p/17070087.html

相关文章

  • 打印机驱动的模式问题 看到别人说的 记录一下 感觉还是很有启发的
    想弄出每页的图片的话,大概有三个办法:投机取巧的办法,属于野路子的,用GPD去定制unidrv.dll,生成一个实际上无任何用的打印机驱动(当然你可以把自己的printerprocessor附加到别的......
  • RedisCluster集群模式下master宕机主从切换期间Redis command timed out的问题
     一、异常场景如下表所示,redis集群6个节点分别部署在3台机器上,每台机器分布一个主节点和一个从节点机器redis主节点端口redis从节点端口主机170017004主......
  • 如何从 JS 对象中删除属性?
    问题描述给定一个对象:letobj={name:'echohye',age:'18',hobby:'sleep'}如何删除属性hobby以得到以下obj?letobj={name:'echohye',age:'......
  • Flutter监听安卓系统字体变化,监听安卓系统深色模式切换
    Flutter通过强大的MediaQuery控件做到监听前设备的信息及其设备信息的动态变化参考:Flutter强大的MediaQuery控件Flutter小技巧之MediaQuery和build优化你不知道的......
  • 01 什么是面向对象
    属性+方法就是一个类......
  • 浅谈PHP设计模式的访问者模式
    简介:访问者模式,属于行为型的设计模式。表示一个作用于某对象结构中的各元素的操作。它是你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。适用场景:类中......
  • js对象数组去重
    一个对象数组,根据传入的属性key对应的值来去重,实现方法如下,用双数组法,只要一次循环即可,时间复杂度低//对象数组去重arr=[{a:1},{a:2},{a:1},{a:3}]functiontodo(p......
  • 08-外观模式
    08-外观模式概念外观模式(facade)为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。什么时候使用外观模式三个阶段......
  • c++ 利用开发人员命令提示工具查看对象模型
      1.跳转盘符   C:           //(以C盘为例,文件储存在哪盘跳转哪盘)例:  2.跳转文件路径cd具体路径例:      ......
  • JS_13_操作表格对象
    表格对象的rows属性可获得所有的行对象。行对象的cells属性可获得所有的列对象。 删除行对象://获取行对象的角标行对象.rowIndex;//通过角标删除行对象表格对象.de......