摘要:实现我们将创建一个抽象类,该类声明了两个方法以及记录客户端名字的属性值。创建具体的类集成该抽象类。第一步创建抽象类第二步创建具体的类继承抽象类第三步创建类第四步使用类通过传递的值来获取或者类的对象第五步校验输出推荐阅读被遗忘的设计模式
设计模式-Null Object Pattern原文链接
译者:smallclover
Thanks for your watching
在Null Object①设计模式中,一个Null Object替换对一个值为null的object的检查,而不是通过if语句来判断该值是不是为null。Null Object反映了一种do-nothing②的关系。这样的Null Object也可以用于提供默认行为,当数据不可用时。
在 Null Object 模式中,我们创建一个 抽象类声明了各种各样需要之执行的操作,创建具体的类继承这个抽象类,并且创建一个Null Object类来提供do-nothing的实现,同时也能在我们需要的时候帮我们检测null值。
译注
① Null Object 直译的话就是空对象,感觉不够优雅,而且不太符合它的实际意义,所以暂时使用英文单词来代替。这里的Null Object不是指对象的值为null(Object object = null)而是指,该对象表达的是Null的含义。我们人为的为null赋予具体的含义,让null代表一种特殊的数据状态。来使程序语义更加的明确,避免空值和null等数据值使得程序语义混乱,以及null值导致程序的崩溃等等。这种为null赋予具体含义的思想 在Google的java类库guava中有很好的实现。
② 在本文中do-nothing 指,若对象的值为null时,将不做任何动作。
实现我们将创建一个抽象类AbstractCustomer,该类声明了两个方法以及记录客户端名字的属性值。创建具体的类集成该抽象类。工厂类CustomerFactory通过 客户端传递给它的名字来创建并返回RealCustomer或者NullCustomer的对象。
NullPatternDemo,我们的demo类,将使用CustomerFactory来展示如何使用NullObjectPattern。
创建抽象类
AbstractCustomer.java
public abstract class AbstractCustomer { protected String name; public abstract boolean isNil(); public abstract String getName(); }第二步
创建具体的类继承抽象类 AbstractCustomer.java
RealCustomer.java
public class RealCustomer extends AbstractCustomer { public RealCustomer(String name) { this.name = name; } @Override public String getName() { return name; } @Override public boolean isNil() { return false; } }
NullCustomer.java
public class NullCustomer extends AbstractCustomer { @Override public String getName() { return "Not Available in Customer Database"; } @Override public boolean isNil() { return true; } }第三步
创建CustomerFactory类
CustomerFactory.java
public class CustomerFactory { public static final String[] names = {"Rob", "Joe", "Julie"}; public static AbstractCustomer getCustomer(String name){ for (int i = 0; i < names.length; i++) { if (names[i].equalsIgnoreCase(name)){ return new RealCustomer(name); } } return new NullCustomer(); } }第四步
使用CustomerFactory类通过customer传递的name值来获取RealCustomer或者NullCustomer类的对象.
NullPatternDemo.java
public class NullPatternDemo { public static void main(String[] args) { AbstractCustomer customer1 = CustomerFactory.getCustomer("Rob"); AbstractCustomer customer2 = CustomerFactory.getCustomer("Bob"); AbstractCustomer customer3 = CustomerFactory.getCustomer("Julie"); AbstractCustomer customer4 = CustomerFactory.getCustomer("Laura"); System.out.println("Customers"); System.out.println(customer1.getName()); System.out.println(customer2.getName()); System.out.println(customer3.getName()); System.out.println(customer4.getName()); } }第五步
校验输出
Customers Rob Not Available in Customer Database Julie Not Available in Customer Database
推荐阅读:被遗忘的设计模式
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66084.html
摘要:创建的对象使构造函数私有,外界将无法实例化该类获得唯一可用的对象第二步从单例类获得唯一的对象。非法构造编译错误,构造函数不可见。获得唯一可用对象展示信息第三步校验输出。 原文链接译者:smallclover个人翻译,水平有限,如有错误欢迎指出,谢谢! 设计模式-单例模式 单例模式是Java中最简单的设计模式之一。这种类型的设计模式,是创建型模式下创建对象的最好方式之一。这个模式涉及到一...
摘要:设计模式是软件开发人员在整个软件开发的过程中面临普遍问题的解决方案。这些作者被统称为四人帮。根据这些作者的观念,设计模式主要是基于一下几种面向对象的设计原则。例如,单例模式表示使用单一对象。我们还将讨论另外一个类别的设计模式。 原文链接译者:smallclover个人翻译,水平有限,如有错误欢迎指出,谢谢! 设计模式-概述 设计模式体现了经验丰富的面向对象软件开发人员的最佳实践。设计模...
摘要:迭代器模式属于行为型模式下的一种。实现我们将创建一个接口,该接口描述迭代所需要的方法紧接着声明了一个接口,该接口返回一个对象。我们会创建具体的类实现接口和接口,并去使用它们。第三步使用获得迭代器并且打印。 原文地址译者 smallclover希望对你们有所帮助 设计模式-迭代器模式 迭代器是Java和.Net程序环境下经常使用的一种设计模式。这种设计模式通常用来获取能顺序访问集合对元素...
摘要:例如,在执行代价较高的数据库操作后创建对象。引用来自脚本之家博客原型模式深拷贝与浅拷贝实现我们将创建一个抽象的类和继承这个抽象类的子类。第一步创建一个抽象类实现接口。 原文链接译者:smallclover个人翻译,水平有限,如有错误欢迎指出,谢谢! 设计模式-原型模式 原型模式是指创建对象的副本,同时保持性能。这种类型的设计模式是创建型设计模式下创建对象最好的方式之一。 这个模式需要实...
摘要:原文链接译者个人翻译,水平有限,希望有所帮助设计模式模式设计模式是模式的代表。代表可视化模型所包含的数据。它控制数据流向对象,并且在数据发生改变的时候更新视图,它保持者和的分离。 原文链接 译者:smallclover 个人翻译,水平有限,希望有所帮助 设计模式-MVC模式 MVC设计模式 是Model-View-Controller 模式的代表(stand for)。该设计模式主...
阅读 1239·2021-10-11 10:57
阅读 2026·2021-09-02 15:15
阅读 1567·2019-08-30 15:56
阅读 1174·2019-08-30 15:55
阅读 1138·2019-08-30 15:44
阅读 960·2019-08-29 12:20
阅读 1277·2019-08-29 11:12
阅读 1044·2019-08-28 18:29