学习effective java-20类和接口之类层次优于标签类
来源:互联网 发布:我的世界java安装 编辑:程序博客网 时间:2024/04/30 13:32
该知识点是自己从书籍中学习的笔记。
1.标签类是指类中定义了一个变量,使用该变量的值控制着该做什么动作。如下:
public class Figure {
enum Shape {
RECTANGLE, CIRCLE
};
final Shape shape;
double height;
double width;
double radious;
public Figure(double radious) {
this.shape = Shape.CIRCLE;
this.radious = radious;
}
public Figure(double height,double width) {
this.shape = Shape.RECTANGLE;
this.width = width;
this.height = height;
}
public double area() {
switch (shape) {
case CIRCLE:
return Math.PI * radious * radious;
case RECTANGLE:
return width * height;
default:
throw new AssertionError();
}
}
}
上面就是一个标签类,该类设计的并不好,该类的阅读性不好。当用户需要创建Circle对象,然后获取面积的时候,会通过标签变量shape来进行判断。如果后面再增加一个多边形的时候,那么该类的Enum就需要增加个多边形的枚举值,同时area方法也需要修改,该类还需要增加构造方法和成员变量。这样长之以往,会导致该类无限增大,性能会降低。
2.鉴于上面的问题,所以可以使用类层次来修改上述代码,如下:
abstract class Figure1 {
abstract double area();
}
class Circle extends Figure1 {
private double radious;
public Circle(double radious) {
this.radious = radious;
}
@Override
double area() {
return Math.PI * radious * radious;
}
}
class Rectangle extends Figure1 {
private double height;
private double width;
public Rectangle(double height,double width) {
this.height = height;
this.width = width;
}
@Override
double area() {
return height * width;
}
}
当需要增加一个形状的时候,仅仅是增加一个子类,对于子类的属性仅仅赋给子类就可以了。阅读性也好。
当然,标签类也不是不好,在某些类的属性和子类已经固定,并且子类不多的时候就可以使用标签类来实现。
- 学习effective java-20类和接口之类层次优于标签类
- effective java(20) 之类层次优于标签类
- Effective Java 第 20 条: 类层次优于标签类
- 《Effective java》读书记录-第20条-类层次优于标签类
- 学习effective java-18类和接口之接口优于抽象类
- Effective Java读书笔记-接口优于抽象类
- 学习effective java-16类和接口之复合优于继承
- 第20条:类层次优于标签
- 类层次优于标签类
- 类层次优于标签类。
- Effective Java之类和接口
- effective java之类和接口
- Effective Java 第 18 条:接口优于抽象类
- effective java(18) 之接口优于抽象类
- 第20条:类层次优于标签类
- 第20条:类层次优于标签类
- Effective Java 18:接口优于抽象类 Prefer interfaces to abstract classes
- effective java(类和接口)
- DELPHI中如何开发包含 BLOB 属性的控件
- 敏捷开发修炼之道--读书笔记(1)
- powershell2.0 使用脚本建立exchange2010的用户帐号及邮箱
- 【原创】Delphi中Thread Error解决三例
- qemu虚拟开发板
- 学习effective java-20类和接口之类层次优于标签类
- 用delphi编写ISAPI过滤器
- c#3.0增加的功能
- Flex使用Blazeds与Java交互及自定义对象转换详解
- 【首发预告评测】QQ麻将iPhone版即将上市:延续极致简约的移动化策略
- 学习effective java-21类和接口之使用功能对象表示策略
- 查看oracle中被锁的对象
- Javascript - HTML的request类
- 详解win7中的文件属性“访问时间”和“修改时间”不一致的原因分析 【原来LastAccessTime早就没用了】