Một cách dễ hiểu về Factory Design Pattern là xem nó như một nhà máy sản xuất đối tượng. Bạn chỉ cần gửi yêu cầu tới nhà máy, và nhà máy sẽ sản xuất ra đối tượng bạn muốn mà không cần biết cụ thể quá trình sản xuất như thế nào.
Ví dụ, giả sử bạn đang viết một ứng dụng đặt hàng trực tuyến cho một cửa hàng thú cưng, trong đó có nhiều loại thú cưng như chó, mèo, và chim. Bạn có thể sử dụng Factory Design Pattern như sau:
// Interface đối tượng
interface Shape {
fun draw()
}
// Các lớp cụ thể triển khai Shape
class Circle : Shape {
override fun draw() {
println("Vẽ hình tròn")
}
}
class Square : Shape {
override fun draw() {
println("Vẽ hình vuông")
}
}
// Factory để tạo ra các đối tượng Shape
object ShapeFactory {
// Phương thức factory nhận một tham số và trả về đối tượng tương ứng
fun createShape(type: String): Shape? {
return when (type) {
"Circle" -> Circle()
"Square" -> Square()
else -> null
}
}
}
fun main() {
// Sử dụng Factory để tạo ra các đối tượng Shape
val circle = ShapeFactory.createShape("Circle")
circle?.draw()
val square = ShapeFactory.createShape("Square")
square?.draw()
}
Trong ví dụ này, chúng ta có một giao diện Shape đại diện cho các hình dạng, và hai lớp cụ thể Circle và Square triển khai giao diện này. ShapeFactory là factory class, và nó có một phương thức createShape để tạo ra các đối tượng Shape dựa trên loại được chỉ định. Khi chạy, chúng ta sử dụng factory để tạo ra các đối tượng và gọi phương thức draw() của chúng.