第19条:用类代替结构
如果一个公有类暴露了它的数据域,那么要想在将来改变该类内部数据表示是不可能得,因为公有类的客户代码已经遍布各处了。然而,如果一个类是包级私有的,或者是一个私有嵌套类,则直接暴露其数据域并没有本质的错误(该些情况没有对外公开)。(正确做法,私有域,公有的get,set方法)。
第20条:用类层次来代替联合。
第21条:用类来代替enum结构(指c里的enum)。
类型安全枚举模式:
多路分发技术:
public abstract class Operation{
private final String name;
Operation(String name){this.name=name;}
abstract double eval(double x,double y);
public static final Operation PLUS=new Operation("+"){
double eval(double x,double y){return x+y;}
}
public static final Operation PLUS=new Operation("-"){
double eval(double x,double y){return x-y;}
}
}
第22条:用类和接口来代替函数指针
c语言中函数指针的主要用途是实现strategy模式。为了在java中实现这模式,声明一个接口表示该策略,并且为每个具体策略声明一个实现了该接口的类。如果一个具体策略只被使用一次,那么通常使用匿名类来声明和实例化这个具体策略类,如果一个具体粗略需要被导出去以便重复使用,那么它的类通常是一个私有的静态成员类,并且通过一个公有静态final域被导出,其类型为该策略接口。
如果一个公有类暴露了它的数据域,那么要想在将来改变该类内部数据表示是不可能得,因为公有类的客户代码已经遍布各处了。然而,如果一个类是包级私有的,或者是一个私有嵌套类,则直接暴露其数据域并没有本质的错误(该些情况没有对外公开)。(正确做法,私有域,公有的get,set方法)。
第20条:用类层次来代替联合。
第21条:用类来代替enum结构(指c里的enum)。
类型安全枚举模式:
多路分发技术:
public abstract class Operation{
private final String name;
Operation(String name){this.name=name;}
abstract double eval(double x,double y);
public static final Operation PLUS=new Operation("+"){
double eval(double x,double y){return x+y;}
}
public static final Operation PLUS=new Operation("-"){
double eval(double x,double y){return x-y;}
}
}
第22条:用类和接口来代替函数指针
c语言中函数指针的主要用途是实现strategy模式。为了在java中实现这模式,声明一个接口表示该策略,并且为每个具体策略声明一个实现了该接口的类。如果一个具体策略只被使用一次,那么通常使用匿名类来声明和实例化这个具体策略类,如果一个具体粗略需要被导出去以便重复使用,那么它的类通常是一个私有的静态成员类,并且通过一个公有静态final域被导出,其类型为该策略接口。