1. W1 是什么,什么是工厂模式?
- 工厂模式(Factory Pattern)是一种创建对象的设计模式。它通过定义一个公共接口或基类,并使用工厂类来创建具体的对象实例,而不是直接在客户端代码中使用构造函数。
2. W2 为什么,为什么需要使用工厂模式,能给我们编码带来什么好处?
工厂模式在 Android 开发中的应用广泛,它提供了一种灵活的方式来创建对象,隐藏了具体对象的实现细节,同时还具有以下好处:
-
封装对象创建逻辑:工厂模式将对象的创建逻辑封装在工厂类中,客户端代码无需关心具体对象的创建过程。这样可以降低代码的耦合度,提高代码的可维护性和可扩展性。
-
统一对象创建接口:工厂模式通过定义公共接口或基类,使得客户端代码可以通过相同的方式创建不同类型的对象。这样简化了客户端代码,使其更加清晰和易于理解。
-
隐藏具体实现:工厂模式将对象创建过程与客户端代码分离,隐藏了具体对象的实现细节。客户端只需要与工厂类进行交互,而不需要了解具体对象的创建细节。这样可以提高代码的安全性和保护知识产权。
3. W3,如何使用?
下面是代码示例:
// 抽象产品接口 - 数据库访问对象
interface UserDao {
fun getUser(id: Int): User
fun saveUser(user: User)
}
// 具体产品类A - SQLite数据库访问对象
class SQLiteUserDao : UserDao {
override fun getUser(id: Int): User {
// 从SQLite数据库中获取用户
return User("John Doe", 25)
}
override fun saveUser(user: User) {
// 将用户保存到SQLite数据库
}
}
// 具体产品类B - Room数据库访问对象
class RoomUserDao : UserDao {
override fun getUser(id: Int): User {
// 从Room数据库中获取用户
return User("Jane Smith", 30)
}
override fun saveUser(user: User) {
// 将用户保存到Room数据库
}
}
// 工厂类 - 数据库访问对象工厂
class UserDaoFactory {
companion object {
fun createUserDao(databaseType: DatabaseType): UserDao {
return when (databaseType) {
DatabaseType.SQLite -> SQLiteUserDao()
DatabaseType.Room -> RoomUserDao()
}
}
}
}
// 枚举类 - 数据库类型
enum class DatabaseType {
SQLite,
Room
}
// 数据类 - 用户
data class User(val name: String, val age: Int)
// 在客户端代码中使用工厂模式创建数据库访问对象
val userDao = UserDaoFactory.createUserDao(DatabaseType.Room)
val user = userDao.getUser(1)
println("User: ${user.name}, Age: ${user.age}")
Thank you for your reading, best regards!