面试题答案
一键面试抽象类在Java工厂模式中的角色
- 定义产品规范:抽象类可以定义产品对象的公共接口和行为,所有具体的产品类都继承自该抽象类,确保它们具有一致的结构和功能。这使得工厂模式创建的产品具有统一的外观和使用方式,便于客户端调用。
- 解耦创建和使用:抽象类将产品的具体实现与客户端代码分离。客户端只需要关注抽象类定义的接口,而不需要了解具体产品类的细节。工厂类负责创建具体的产品对象,这种分离有助于提高代码的可维护性和可扩展性。
通过抽象类规范产品对象创建的示例
// 抽象产品类
abstract class Shape {
public abstract void draw();
}
// 具体产品类1
class Circle extends Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
// 具体产品类2
class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
// 工厂类
class ShapeFactory {
public Shape createShape(String type) {
if ("circle".equalsIgnoreCase(type)) {
return new Circle();
} else if ("rectangle".equalsIgnoreCase(type)) {
return new Rectangle();
}
return null;
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
ShapeFactory factory = new ShapeFactory();
Shape circle = factory.createShape("circle");
if (circle != null) {
circle.draw();
}
Shape rectangle = factory.createShape("rectangle");
if (rectangle != null) {
rectangle.draw();
}
}
}
在上述示例中,Shape
抽象类定义了 draw
方法,规范了所有形状(产品)都应该具有绘制的行为。Circle
和 Rectangle
作为具体产品类继承自 Shape
抽象类,并实现了 draw
方法。ShapeFactory
工厂类负责根据传入的类型创建具体的形状对象。客户端通过工厂类获取形状对象,并调用其 draw
方法,而无需了解具体形状类的实现细节,这体现了抽象类在规范产品对象创建方面的作用。