Qua các series tự học về Design Pattern, Hôm nay cafedevn chia sẻ cho ace ví dụ và code cụ thể về cách sử dụng Factory Method với ngôn ngữ lập trình Python. Nhằm giúp ace hiểu rõ cách sử Pattern này với Python một cách nhanh nhất và áp dụng nó vào thực tế.
Nội dung chính
Mô tả code:
Định nghĩa một giao diện(interface) để tạo một đối tượng, nhưng hãy để các lớp con quyết định
lớp nào để khởi tạo. Phương thức Factory cho phép một lớp trì hoãn tạo cho các lớp con.
Phần code
# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------
"""
Define an interface for creating an object, but let subclasses decide
which class to instantiate. Factory Method lets a class defer
instantiation to subclasses.
"""
import abc
class Creator(metaclass=abc.ABCMeta):
"""
Declare the factory method, which returns an object of type Product.
Creator may also define a default implementation of the factory
method that returns a default ConcreteProduct object.
Call the factory method to create a Product object.
"""
def __init__(self):
self.product = self._factory_method()
@abc.abstractmethod
def _factory_method(self):
pass
def some_operation(self):
self.product.interface()
class ConcreteCreator1(Creator):
"""
Override the factory method to return an instance of a
ConcreteProduct1.
"""
def _factory_method(self):
return ConcreteProduct1()
class ConcreteCreator2(Creator):
"""
Override the factory method to return an instance of a
ConcreteProduct2.
"""
def _factory_method(self):
return ConcreteProduct2()
class Product(metaclass=abc.ABCMeta):
"""
Define the interface of objects the factory method creates.
"""
@abc.abstractmethod
def interface(self):
pass
class ConcreteProduct1(Product):
"""
Implement the Product interface.
"""
def interface(self):
pass
class ConcreteProduct2(Product):
"""
Implement the Product interface.
"""
def interface(self):
pass
def main():
concrete_creator = ConcreteCreator1()
concrete_creator.product.interface()
concrete_creator.some_operation()
if __name__ == "__main__":
main()
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Tài liệu từ cafedev:
- Full series tự học Design Pattern từ cơ bản tới nâng cao tại đây nha.
- Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!