面试题答案
一键面试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("移动端示例文本");
}
}