当前位置: 首页 > 后端技术 > Java

空对象模式(NullObjectPattern)

时间:2023-04-01 23:09:19 Java

本文节选自《设计模式就该这样学》1 空对象模式的定义空对象模式(NullObjectPattern)不是GoF设计模式,但它是一种出现频率足够高的模式也被认为是一种设计模式模式。它的具体定义是设计一个空对象来代替对NULL对象实例的检查。NULL对象不是检查控件,而是反映什么都不做的关系。此类NULL对象还可以在数据不可用时提供默认行为,这是一种行为设计模式。原文:提供一个对象作为缺少给定类型对象的代理。Null对象提供智能的无所事事的行为,向其合作者隐藏细节。以下应用场景。(1)一个对象实例需要一个协作实例。空对象模式不引入协作实例,它只是使用现有实例。(2)部分协作实例不需要任何处理。(3)从客户端抽象出对象实例不存在的代码逻辑。3 空对象模式的UML类图空对象模式的UML类图如下图所示。从上图可以看出,空对象模式主要包括3个角色。(1)抽象对象(AbstractObject):定义了所有子类共有的行为和属性。(2)真实对象(RealObject):继承AbstractObject类,实现所有行为。(3)空对象(NullObject):继承AbstractObject类,不对父类的方法和属性进行实现和赋值。4 空物模式的常用写法下面是空物模式的一般写法。publicclassClient{publicstaticvoidmain(String[]args){ObjectFactoryfactory=newObjectFactory();System.out.println(factory.getObject("Joe").isNill());System.out.println(factory.getObject("Tom").isNill());}//抽像对像staticabstractclassAbstractObject{abstractvoidrequest();抽象布尔isNill();}//空对象staticclassNullObjectextendsAbstractObject{publicvoidrequest(){System.out.println("NotAvailableRequest");}booleanisNill(){返回真;}}//真实对象staticclassRealObjectextendsAbstractObject{privateStringname;publicRealObject(Stringname){this.name=name;}publicvoidrequest(){System.out.println("Dosamething...");}booleanisNill(){返回false;}}//对象工厂staticclassObjectFactory{privatestaticfinalString[]names={"Tom","Mic","James"};publicAbstractObjectgetObject(Stringname){for(Stringn:names){if(n.equalsIgnoreCase(name)){returnnewRealObject(name);}}返回新的NullObject();}}}5 空对象模式的优点(1)可以加强系统的稳定性,可以有效降低空指针错误对整个系统的影响,使得系统更加稳定(2)可实现对空物情况的自定义控制,掌握空物处理主动权。(3)不依赖Client保证整个系统的稳定运行。(4)通过定义isNull()来代替条件语句==null,更加优雅易懂。6 空对象模型的缺点。每一个要返回的真实实体都要建立一个对应的空对象模型,这样会增加类的数量。关注微信公众号“汤姆炸弹架构”回复“设计模式”获取完整源码。【推荐】汤姆炸弹架构:30个设计模式实战案例(附源码),挑战60W年薪不是梦技术在于分享,我分享我的快乐!如果本文对您有帮助,请关注并点赞;有什么建议也可以留言或私信。您的支持是我坚持创作的动力。关注微信公众号“汤姆炸弹架构”,获取更多技术干货!