Android设计模式之工厂模式与使用场景
·
在Android开发中,工厂模式是一种创建型设计模式,它将对象的创建和使用分离,通过工厂类来负责创建对象。这种模式可以提高代码的可维护性和可扩展性,尤其适合复杂对象的创建过程。下面详细介绍工厂模式的类型、实现和典型应用场景。
一、工厂模式的三种类型
1. 简单工厂(Simple Factory)
- 概念:一个工厂类根据传入的参数决定创建哪种产品类的实例。
- 缺点:不符合开闭原则(新增产品需修改工厂类)。
示例代码:
// 产品接口
interface Car {
void drive();
}
// 具体产品
class Benz implements Car {
@Override
public void drive() {
System.out.println("驾驶奔驰");
}
}
class BMW implements Car {
@Override
public void drive() {
System.out.println("驾驶宝马");
}
}
// 简单工厂
class CarFactory {
public static Car createCar(String type) {
if ("Benz".equals(type)) {
return new Benz();
} else if ("BMW".equals(type)) {
return new BMW();
}
return null;
}
}
// 使用示例
Car benz = CarFactory.createCar("Benz");
benz.drive(); // 输出:驾驶奔驰
2. 工厂方法(Factory Method)
- 概念:定义一个创建对象的接口,让子类决定实例化哪个类。
- 优点:符合开闭原则,新增产品只需添加新的工厂子类。
示例代码:
// 工厂接口
interface CarFactory {
Car createCar();
}
// 具体工厂
class BenzFactory implements CarFactory {
@Override
public Car createCar() {
return new Benz();
}
}
class BMWFactory implements CarFactory {
@Override
public Car createCar() {
return new BMW();
}
}
// 使用示例
CarFactory factory = new BenzFactory();
Car benz = factory.createCar();
benz.drive(); // 输出:驾驶奔驰
3. 抽象工厂(Abstract Factory)
- 概念:提供一个创建一系列相关或相互依赖对象的接口,无需指定具体类。
- 适用场景:创建多个产品族的对象(如不同操作系统的UI组件)。
示例代码:
// 抽象产品接口
interface Button {
void click();
}
interface Checkbox {
void check();
}
// 具体产品(Android风格)
class AndroidButton implements Button {
@Override
public void click() {
System.out.println("Android按钮点击");
}
}
class AndroidCheckbox implements Checkbox {
@Override
public void check() {
System.out.println("Android复选框勾选");
}
}
// 抽象工厂
interface UIFactory {
Button createButton();
Checkbox createCheckbox();
}
// 具体工厂(Android工厂)
class AndroidUIFactory implements UIFactory {
@Override
public Button createButton() {
return new AndroidButton();
}
@Override
public Checkbox createCheckbox() {
return new AndroidCheckbox();
}
}
// 使用示例
UIFactory factory = new AndroidUIFactory();
Button button = factory.createButton();
button.click(); // 输出:Android按钮点击
二、工厂模式在Android中的典型应用场景
1. View创建(简单工厂)
- 场景:根据不同条件创建不同类型的View。
- 示例:
public class ViewFactory { public static View createView(Context context, int type) { switch (type) { case TYPE_BUTTON: return new Button(context); case TYPE_TEXT: return new TextView(context); default: return new View(context); } } }
2. 数据库操作(工厂方法)
- 场景:根据不同数据库类型(SQLite、Room、Firebase)创建数据访问对象。
- 示例:
interface DatabaseFactory { UserDao createUserDao(); PostDao createPostDao(); } class RoomDatabaseFactory implements DatabaseFactory { @Override public UserDao createUserDao() { return Room.databaseBuilder(context, AppDatabase.class, "app-db") .build() .userDao(); } @Override public PostDao createPostDao() { return Room.databaseBuilder(context, AppDatabase.class, "app-db") .build() .postDao(); } }
3. 多主题应用(抽象工厂)
- 场景:根据不同主题(如Light/Dark模式)创建UI组件。
- 示例:
interface ThemeFactory { Button createButton(); TextView createTextView(); } class LightThemeFactory implements ThemeFactory { @Override public Button createButton() { Button btn = new Button(context); btn.setBackgroundColor(Color.WHITE); return btn; } @Override public TextView createTextView() { TextView tv = new TextView(context); tv.setTextColor(Color.BLACK); return tv; } }
4. 第三方库初始化(简单工厂)
- 场景:统一管理第三方库的初始化配置。
- 示例:
public class LoggerFactory { public static Logger createLogger(String type) { switch (type) { case "debug": return new DebugLogger(); case "release": return new ReleaseLogger(); default: return new DefaultLogger(); } } }
三、工厂模式的优缺点
优点:
- 解耦创建和使用:客户端只需关注接口,无需关心对象创建细节。
- 可维护性:对象创建逻辑集中在工厂类,便于修改。
- 扩展性:工厂方法和抽象工厂模式符合开闭原则,易于添加新产品。
缺点:
- 类膨胀:工厂子类过多会导致代码复杂度增加。
- 选择困难:需根据场景选择合适的工厂模式(简单工厂/工厂方法/抽象工厂)。
四、工厂模式与其他模式的结合
- 工厂模式 + 单例模式:工厂类可以是单例,确保全局只有一个工厂实例。
- 工厂模式 + 策略模式:工厂创建的对象可以是策略接口的实现类,动态切换策略。
- 工厂模式 + 建造者模式:对于复杂对象,工厂可以委托建造者模式来创建。
五、总结
工厂模式是Android开发中最常用的设计模式之一,适用于以下场景:
- 对象创建过程复杂,需要封装细节。
- 根据不同条件创建不同类型的对象。
- 系统需要独立于产品的创建、组合和表示。
通过合理使用工厂模式,可以提高代码的可维护性、可扩展性和可测试性。在实际开发中,需根据对象复杂度和变化频率选择合适的工厂模式实现。
更多推荐



所有评论(0)