Java Superclass设计模式应用案例
在Java中,Superclass(超类)设计模式通常指的是使用继承来创建一个通用的基类,然后从该基类派生出更具体的子类。这种设计模式有助于代码重用和模块化。下面是一个简单的应用案例:
假设我们正在开发一个图形编辑器,可以绘制不同类型的形状,如圆形、矩形和三角形。我们可以创建一个名为Shape
的超类,它包含所有形状共有的属性和方法,然后为每种形状创建一个子类。
首先,我们定义Shape
超类:
public abstract class Shape {
protected String color;
public Shape(String color) {
this.color = color;
}
public abstract double getArea();
public abstract double getPerimeter();
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
}
在这个超类中,我们定义了一个抽象方法getArea()
和getPerimeter()
,这意味着所有继承自Shape
的子类都必须实现这两个方法。我们还定义了一个color
属性和相应的getter和setter方法。
接下来,我们创建一个名为Circle
的子类:
public class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
@Override
public double getPerimeter() {
return 2 * Math.PI * radius;
}
}
类似地,我们可以创建Rectangle
和Triangle
子类:
public class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(String color, double width, double height) {
super(color);
this.width = width;
this.height = height;
}
@Override
public double getArea() {
return width * height;
}
@Override
public double getPerimeter() {
return 2 * (width + height);
}
}
public class Triangle extends Shape {
private double sideA;
private double sideB;
private double sideC;
public Triangle(String color, double sideA, double sideB, double sideC) {
super(color);
this.sideA = sideA;
this.sideB = sideB;
this.sideC = sideC;
}
@Override
public double getArea() {
double s = (sideA + sideB + sideC) / 2;
return Math.sqrt(s * (s - sideA) * (s - sideB) * (s - sideC));
}
@Override
public double getPerimeter() {
return sideA + sideB + sideC;
}
}
现在,我们可以在主程序中使用这些类来创建不同类型的形状,并计算它们的面积和周长:
public class Main {
public static void main(String[] args) {
Shape circle = new Circle("Red", 5);
System.out.println("Circle area: " + circle.getArea());
System.out.println("Circle perimeter: " + circle.getPerimeter());
Shape rectangle = new Rectangle("Blue", 4, 6);
System.out.println("Rectangle area: " + rectangle.getArea());
System.out.println("Rectangle perimeter: " + rectangle.getPerimeter());
Shape triangle = new Triangle("Green", 3, 4, 5);
System.out.println("Triangle area: " + triangle.getArea());
System.out.println("Triangle perimeter: " + triangle.getPerimeter());
}
}
这个案例展示了如何使用Superclass设计模式来创建一个可扩展的图形编辑器。通过使用继承和抽象类,我们可以轻松地添加新的形状类型,而无需修改现有的代码。