EffectiveJava之19-用类层次代替联合

来源:互联网 发布:php隐藏域 编辑:程序博客网 时间:2024/06/18 04:32

1、  C中的联合体:

typedef  enum {RECT , CIRC} shape_type

 

typedef  struct {

       double length;

       double width;

}rectangleDimensions_t

      

typedef  struct {

       double radius;

}circle Dimensions_t

 

typedef  struct {

       shape_type tag ;

       union {

           rectangleDimensions_t   rectangle ;

              circle Dimensions_t circle ;

}dimensions

       } shape_t

 

 

       double area ( shape_t * pshape_t ){

              switch( pshape_t ->tag){

              case RECT : {

                     double length = pshape_t-> dimensions . rectangle .length ;

                     double width = pshape_t-> dimensions . rectangle .width ;

                     return           l* w ;

}

           CaseCIRC : {

           double  r = pshape_t-> dimensions . circle.radius;

              return           r*r*Pi;

 

           }

           Default: return -1;

  

      把一个可区分的联合变换为一个类层次:

      先定义一个抽象类,每个操作定义一个抽象方法,其行为取决去便签的值。

      如上例:  area 这个首相类的类层次的根(root)。

                 如果有其他的操作行为不依赖于标签的值,则吧这些操作变成根类中的具体方法。

 

0 0