当前位置 : 主页 > 手机开发 > 其它 >

设计模式 – Fowler Null对象模式:为什么要使用继承?

来源:互联网 收集:自由互联 发布时间:2021-06-19
为什么Fowler PoEAA p. 498以下列方式定义空对象模式(示例缩短,语言为c#但无关紧要): public class Customer{ public virtual string Name {get; set;}}public class NullCustomer : Customer, INull{ public override Name { g
为什么Fowler PoEAA p. 498以下列方式定义空对象模式(示例缩短,语言为c#但无关紧要):

public class Customer
{
  public virtual string Name {get; set;}
}

public class NullCustomer : Customer, INull
{
  public override Name 
  {
     get { return "ImTheNull";}
     // setter ommitted
  }
}

INull用作标记接口.
我不喜欢这种方法有三个原因:

>属性需要标记为虚拟
>我不能再密封我的实体课了
>引入至少(n 1)个新类型(n个空对象,一个标记接口)

为什么不像这样实现:

public class Customer
{
  public static readonly Customer NullCustomer = new Customer(){Name = "ImtTheNullCustomer";}

  public string Name {get; set;}
}

我一般都认为所有福勒的例子都经过深思熟虑,显然我必须在这里错过一些东西.

继承的原因是覆盖类的行为.你在考虑它的方式在我看来就像你要检查你所拥有的对象是否等于NullCustomer静态实例来做出决定,但是null对象的要点是支持 Liskov’s substitution principle.

换句话说,您使用null对象来设置引用,并且您将不会对其进行特殊检查,您将只使用它并且它应该具有不同的行为(实际上缺乏行为).

网友评论