一种不好的设计大家来论论

class Base
{
   Type GetType()
  {
    return Type.Base;
  }   
}

Class DeriveClassA : Base
{
   Type GetType()
   {
      return Type.DeriveClassA;
   }
   public void AFounction()
   {
       // do sthing...
   }
}

Class DeriveClassB : Base
{
   Type GetType()
   {
      return Type.DeriveClassB;
   }
   public void BFounction()
   {
      // do anther sthing
   }
}

enum Type
{
    Base,
    DeriveClassA,
    DeriveClassB
}
从OO来看这不是一个好的设计,因为Base知道Type枚举,从而增加一个新的子类就会修改Enum Type,从而导致Base重新编译,从而导致所有的子类重新编译。然而如果从修改的角度上来看,似乎没有什么大的修改,仅仅是需要重新编译一遍。好处是,每个类都知道自己是什么类型。使用的时候
void Fountion(const Base& myclass)
{
   switch(myclass.GetType())
   {
      case Base:
          // dosth....
          break;
      case DeriveClassA:
          // castdown DeriveClassA,然后执行DeriveClassA特有的方法AFounction
          break;
      case DeriveClassB:
          // castdown DeriveClassB,然后执行DeriveClassB特有的方法BFounction
          break;
      default:
          break;
   }
}
如果这样的话,那么好,一个疯狂的想法,不管什么类都可以从一个这样的base class派生,然后GetType,然后castdown,但这很糟糕。没有任何复用价值,而且enum很难维护。但这里是对一系列is-a关系的类采用这个方法。
用户使用没有透明度,但是用户要知道AFounction和BFounction必须知道DeriveClassA和DeriveClassB,归根到底是接口设计不当,最好是让用户只知道接口(Base),而不知道他的实现。 -___-

转载于:https://www.cnblogs.com/SweetDream/archive/2006/11/30/577467.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值