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 Abstract Factory 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
Cung cấp một giao diện để tạo các họ có liên quan hoặc phụ thuộc các đối tượng mà không chỉ định các lớp cụ thể của chúng.
Phần code
"""
Provide an interface for creating families of related or dependent
objects without specifying their concrete classes.
"""
import abc
class AbstractFactory(metaclass=abc.ABCMeta):
"""
Declare an interface for operations that create abstract product
objects.
"""
@abc.abstractmethod
def create_product_a(self):
pass
@abc.abstractmethod
def create_product_b(self):
pass
class ConcreteFactory1(AbstractFactory):
"""
Implement the operations to create concrete product objects.
"""
def create_product_a(self):
return ConcreteProductA1()
def create_product_b(self):
return ConcreteProductB1()
class ConcreteFactory2(AbstractFactory):
"""
Implement the operations to create concrete product objects.
"""
def create_product_a(self):
return ConcreteProductA2()
def create_product_b(self):
return ConcreteProductB2()
class AbstractProductA(metaclass=abc.ABCMeta):
"""
Declare an interface for a type of product object.
"""
@abc.abstractmethod
def interface_a(self):
pass
class ConcreteProductA1(AbstractProductA):
"""
Define a product object to be created by the corresponding concrete
factory.
Implement the AbstractProduct interface.
"""
def interface_a(self):
pass
class ConcreteProductA2(AbstractProductA):
"""
Define a product object to be created by the corresponding concrete
factory.
Implement the AbstractProduct interface.
"""
def interface_a(self):
pass
class AbstractProductB(metaclass=abc.ABCMeta):
"""
Declare an interface for a type of product object.
"""
@abc.abstractmethod
def interface_b(self):
pass
class ConcreteProductB1(AbstractProductB):
"""
Define a product object to be created by the corresponding concrete
factory.
Implement the AbstractProduct interface.
"""
def interface_b(self):
pass
class ConcreteProductB2(AbstractProductB):
"""
Define a product object to be created by the corresponding concrete
factory.
Implement the AbstractProduct interface.
"""
def interface_b(self):
pass
def main():
for factory in (ConcreteFactory1(), ConcreteFactory2()):
product_a = factory.create_product_a()
product_b = factory.create_product_b()
product_a.interface_a()
product_b.interface_b()
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!