EffectiveJava之19-用类层次代替联合
2014-11-23 16:07
197 查看
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)。
如果有其他的操作行为不依赖于标签的值,则吧这些操作变成根类中的具体方法。
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)。
如果有其他的操作行为不依赖于标签的值,则吧这些操作变成根类中的具体方法。
相关文章推荐
- Effective Java 19 Use interfaces only to define types
- effective java观后感(1)-------用静态方法代替构造方法
- Effective Java(优先考虑类型安全的异构容器、用enum代替int常量)
- Effective java第一条:考虑用静态工厂方法代替构造器
- Effective Java -- 用静态工厂方法来代替构造器
- Effective Java 学习笔记(19)
- Effective Java之用EnumSet代替位域(三十二)
- Effective Java(优先考虑类型安全的异构容器、用enum代替int常量)
- Effective Java(优先考虑类型安全的异构容器、用enum代替int常量)
- Effective Java 3rd 条目1 考虑用静态工厂方法代替构造子
- EffectiveJava-考虑用静态工厂方法代替构造器
- Effective Java —— 考虑用静态工厂方法代替构造器
- Effective Java 学习笔记 使用静态工厂方法代替构造器
- Effective Java(优先考虑类型安全的异构容器、用enum代替int常量)
- Effective Java(优先考虑类型安全的异构容器、用enum代替int常量)
- Effective Java 1:考虑使用静态工厂方法代替构造器
- Effective Java 中文版之学习 第1条:考虑用静态工厂方法代替构造器
- Effective Java(优先考虑类型安全的异构容器、用enum代替int常量)
- Effective Java(优先考虑类型安全的异构容器、用enum代替int常量)
- Effective Java之用enum代替int常量(三十)