MST

星途 面试题库

面试题:Java抽象工厂模式中系列对象的创建

请描述在Java抽象工厂模式下,如何创建两个不同系列的对象,例如一个是用于PC端的按钮和文本框对象系列,另一个是用于移动端的按钮和文本框对象系列。请给出关键的抽象工厂、具体工厂、抽象产品和具体产品类的设计思路,并简要说明代码实现的步骤。
14.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. 抽象产品类

  • 抽象按钮类:定义按钮的通用方法,如 draw() 用于绘制按钮。
public abstract class AbstractButton {
    public abstract void draw();
}
  • 抽象文本框类:定义文本框的通用方法,如 setText(String text) 用于设置文本。
public abstract class AbstractTextBox {
    public abstract void setText(String text);
}

2. 具体产品类

  • PC端按钮类:继承抽象按钮类,实现 draw() 方法,绘制PC端样式按钮。
public class PcButton extends AbstractButton {
    @Override
    public void draw() {
        System.out.println("绘制PC端按钮");
    }
}
  • PC端文本框类:继承抽象文本框类,实现 setText(String text) 方法,设置PC端文本框文本。
public class PcTextBox extends AbstractTextBox {
    @Override
    public void setText(String text) {
        System.out.println("设置PC端文本框文本: " + text);
    }
}
  • 移动端按钮类:继承抽象按钮类,实现 draw() 方法,绘制移动端样式按钮。
public class MobileButton extends AbstractButton {
    @Override
    public void draw() {
        System.out.println("绘制移动端按钮");
    }
}
  • 移动端文本框类:继承抽象文本框类,实现 setText(String text) 方法,设置移动端文本框文本。
public class MobileTextBox extends AbstractTextBox {
    @Override
    public void setText(String text) {
        System.out.println("设置移动端文本框文本: " + text);
    }
}

3. 抽象工厂类

定义创建按钮和文本框的抽象方法。

public abstract class AbstractUIFactory {
    public abstract AbstractButton createButton();
    public abstract AbstractTextBox createTextBox();
}

4. 具体工厂类

  • PC端工厂类:继承抽象工厂类,实现创建PC端按钮和文本框的方法。
public class PcUIFactory extends AbstractUIFactory {
    @Override
    public AbstractButton createButton() {
        return new PcButton();
    }

    @Override
    public AbstractTextBox createTextBox() {
        return new PcTextBox();
    }
}
  • 移动端工厂类:继承抽象工厂类,实现创建移动端按钮和文本框的方法。
public class MobileUIFactory extends AbstractUIFactory {
    @Override
    public AbstractButton createButton() {
        return new MobileButton();
    }

    @Override
    public AbstractTextBox createTextBox() {
        return new MobileTextBox();
    }
}

5. 代码实现步骤

  • 定义抽象产品类,确定产品的通用接口。
  • 创建具体产品类,实现抽象产品类的方法,体现不同系列产品的差异。
  • 定义抽象工厂类,声明创建不同产品的抽象方法。
  • 创建具体工厂类,实现抽象工厂类的方法,返回对应系列的具体产品实例。
  • 在客户端代码中,根据需求选择具体的工厂类来创建相应系列的对象。例如:
public class Client {
    public static void main(String[] args) {
        AbstractUIFactory pcFactory = new PcUIFactory();
        AbstractButton pcButton = pcFactory.createButton();
        AbstractTextBox pcTextBox = pcFactory.createTextBox();
        pcButton.draw();
        pcTextBox.setText("PC端示例文本");

        AbstractUIFactory mobileFactory = new MobileUIFactory();
        AbstractButton mobileButton = mobileFactory.createButton();
        AbstractTextBox mobileTextBox = mobileFactory.createTextBox();
        mobileButton.draw();
        mobileTextBox.setText("移动端示例文本");
    }
}