android-interview-questions攻略:工厂模式Android面试解析
在Android面试中,设计模式(Design Pattern)是高频考察点,而工厂模式(Factory Pattern)作为创建型设计模式的代表,常被用来评估开发者的代码架构能力。本文将结合Android面试指南中的核心要点,从应用场景、实现方式到面试常见问题,全面解析工厂模式在Android开发中的实践。
工厂模式的核心价值与应用场景
工厂模式通过封装对象创建逻辑,解决了"对象创建"与"使用"的解耦问题。在Android开发中,当遇到以下场景时,工厂模式能显著提升代码可维护性:
- 多类型对象创建:如RecyclerView的多类型ViewHolder管理
- 复杂对象初始化:需要大量参数或依赖配置的对象创建
- 动态对象切换:根据运行时条件创建不同实现类的实例
项目文档中明确将设计模式列为Android架构面试重点,工厂模式常与单例模式、观察者模式共同出现。
简单工厂模式:ViewHolder创建实例
简单工厂(Simple Factory)通过一个统一的工厂类处理对象创建,适合类型较少的场景。以RecyclerView的ViewHolder创建为例:
// Java实现 - 简单工厂模式
public class ViewHolderFactory {
public static RecyclerView.ViewHolder create(View itemView, int viewType) {
switch (viewType) {
case TYPE_TEXT:
return new TextViewHolder(itemView);
case TYPE_IMAGE:
return new ImageViewHolder(itemView);
default:
throw new IllegalArgumentException("Unknown view type");
}
}
static class TextViewHolder extends RecyclerView.ViewHolder {
TextView textView;
TextViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.text);
}
}
static class ImageViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
ImageViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.image);
}
}
}
Kotlin版本则可利用密封类(Sealed Class)优化类型安全,这也是Kotlin面试常考点:
// Kotlin实现 - 结合密封类的工厂模式
sealed class ViewType {
object Text : ViewType()
object Image : ViewType()
}
object ViewHolderFactory {
fun create(itemView: View, viewType: ViewType): RecyclerView.ViewHolder {
return when (viewType) {
is ViewType.Text -> TextViewHolder(itemView)
is ViewType.Image -> ImageViewHolder(itemView)
}
}
class TextViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textView: TextView = itemView.findViewById(R.id.text)
}
class ImageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val imageView: ImageView = itemView.findViewById(R.id.image)
}
}
工厂方法模式:网络请求适配器实现
工厂方法模式(Factory Method)通过抽象工厂接口和具体工厂实现,支持更多扩展场景。在Android网络请求中,可用于适配不同网络库:
// 抽象产品接口
interface NetworkAdapter {
fun request(url: String): Response
}
// 具体产品实现
class RetrofitAdapter : NetworkAdapter {
override fun request(url: String): Response {
// Retrofit请求实现
}
}
class VolleyAdapter : NetworkAdapter {
override fun request(url: String): Response {
// Volley请求实现
}
}
// 抽象工厂接口
interface NetworkAdapterFactory {
fun create(): NetworkAdapter
}
// 具体工厂实现
class RetrofitFactory : NetworkAdapterFactory {
override fun create() = RetrofitAdapter()
}
class VolleyFactory : NetworkAdapterFactory {
override fun create() = VolleyAdapter()
}
// 使用示例
class ApiManager(factory: NetworkAdapterFactory) {
private val adapter = factory.create()
fun fetchData() {
val response = adapter.request("https://api.example.com/data")
}
}
这种实现符合Android架构组件的依赖注入思想,在ViewModel与Repository设计中尤为重要。
抽象工厂模式:跨平台组件创建
抽象工厂模式(Abstract Factory)用于创建一系列相关联的对象家族。在Kotlin Multiplatform项目中,可实现跨平台组件的统一创建:
// 抽象产品族
interface UiComponentFactory {
fun createButton(): Button
fun createDialog(): Dialog
}
// Android平台实现
class AndroidUiFactory : UiComponentFactory {
override fun createButton() = AndroidButton()
override fun createDialog() = AndroidDialog()
}
// iOS平台实现
class IosUiFactory : UiComponentFactory {
override fun createButton() = IosButton()
override fun createDialog() = IosDialog()
}
// 跨平台使用
class PlatformManager(factory: UiComponentFactory) {
private val button = factory.createButton()
private val dialog = factory.createDialog()
}
项目文档中提到的Kotlin Multiplatform工作原理正是抽象工厂模式的典型应用场景。
面试高频问题与应答策略
1. 工厂模式与构造函数的核心区别?
工厂模式提供了更高层次的封装,支持:
- 复杂对象的分步构建
- 基于条件的动态类型选择
- 对象创建过程的日志记录与异常处理
- 避免构造函数的静态绑定限制
2. 何时不适合使用工厂模式?
- 简单对象创建(直接new更简洁)
- 固定不变的对象类型
- 性能敏感的高频创建场景(反射实现的工厂可能有性能损耗)
3. 工厂模式在Android源码中的应用?
BitmapFactory:处理不同来源的位图创建LayoutInflater:XML布局到View对象的转换MediaPlayer.create():根据数据源创建播放器实例
实战训练与扩展学习
要深入掌握工厂模式,建议结合以下资源进行练习:
- 代码实践:使用工厂模式重构Success.kt中的简单打印逻辑,实现多类型消息处理器
- 面试题集:参考项目中的15 Kotlin面试题,其中第8题涉及工厂模式变种
- 视频教程:观看Android架构设计模式系列讲解,重点理解23:15处的工厂模式案例
通过本文的系统梳理,相信你已掌握工厂模式的核心要义。记住,设计模式的学习关键在于理解"为什么用"而非"怎么用",这正是Android面试指南强调的"架构思维"考察重点。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




