Null Object在C++中如何比较优美地实现

hxxwcc 2008-02-21 02:00:50
看了那本Agile Software Development Principles Patterns,and Practices,其中提出了一个Null Object Pattern,也就是说,NULL被包装成对象,在一些函数上可以有一个NULL Object应有的表现.但是它的实现是利用了Java的语言特性,无法直接移植到C++.

我最初有个考虑是将Base类直接改写成一个Null对象.但是这样作似乎违反了传统习惯,并且使抽象类的功能不再专一.

我的问题是,在继承树上,他应该在那个位置上比较合适?怎么样对其进行利用?不要违反了Single Responsibility Principle和Is-a语意.

相关的Java代码:
[JAVA]
import java.util.Date;
public interface Employee
{
public boolean isTimeToPay(Date payDate);

public void pay();

public static final Employee NULL=new Employee()
{
public boolean isTimeToPay(Date payDate);
{
return false;
}

public void pay()
{
}
};
}
[/JAVA]
...全文
266 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hityct1 2008-02-25
  • 打赏
  • 举报
回复
不懂。mark
JYeung 2008-02-23
  • 打赏
  • 举报
回复
没感觉有这个必要,毕竟C++的哲学跟JAVA是不一样的,生硬的移植未必是好事
hxxwcc 2008-02-23
  • 打赏
  • 举报
回复
C++中interface是这样实现的...
#define interface struct
而且也不是标准C++的一部分
因此,所谓写接口就是写抽象类

public inheritance的语意是指is-a关系,可空类是可空或不空的
那么,public inheritance语意不合适,不能采用,因为如果不空,你继承自一个应该为空的类,语意矛盾

我的想法是能不能把NULL包装一个对象?而不是通过virtual bool IsNull()=0;这样的形式来实现
r_swordsman 2008-02-23
  • 打赏
  • 举报
回复
写一个接口 INullable...所有可空类实现这个接口,
嫌麻烦? 一个基类 CNullable ... 还是实现 INullable 接口...
所有所有可空类从 CNullable 继承
hxxwcc 2008-02-23
  • 打赏
  • 举报
回复
顶自己一下

5,529

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧