ABSTRACT FACTORY
Nội dung trình bày
1. Khái niệm
2. Mục đích
3. Cấu trúc
4. Các thành phần tham gia, ý nghĩa và vai trò
5. Tính chất đặc thù
6. Tình huống áp dụng và các hệ quả
7. Ưu và khuyết điểm của Abstract Factory
8. Các mẫu liên quan
9. Demo
ABSTRACT FACTORY
2
1. Khái niệm
Abstract Factory, tên đầy đủ Abstract Factory Pattern là
một trong các design pattern thuộc nhóm kiến tạo
(Creational) được áp dụng khá phổ biến trong khi thiết kế
và lập trình. Nó cung cấp một giao diện có chức năng tạo
ra một tập các đối tượng có quan hệ hoặc phụ thuộc
nhau mà không cần chỉ rõ các lớp cụ thể nào tại thời
điểm thiết kế.
ABSTRACT FACTORY
3
1. Khái niệm
Mẫu thiết kế Abstract Factory đóng gói một nhóm những lớp
đóng vai trị "sản xuất" (Factory) trong ứng dụng, đây là những
lớp được dùng để tạo ra các đối tượng. Các lớp sản xuất này
có chung một giao diện được kế thừa từ một lớp cha thuần ảo
gọi là "lớp sản xuất ảo".
Người ta còn gọi Abstract Factory là “Factory of
factories”
ABSTRACT FACTORY
4
2. Mục đích
• Cung cấp một giao diện để tạo ra các họ của các đối
tượng phụ thuộc hoặc liên quan đến nhau mà khơng
cần xác định chính xác các lớp thực hiện.
• Tạo ra đối tượng mà khơng cần biết chính xác kiểu dữ
liệu.
• Giúp mã nguồn của bạn trở nên dễ dàng bảo trì nếu
có sự thay đổi.
ABSTRACT FACTORY
5
3. Cấu trúc
class OOSD
AbstractFactory
+
+
Client
CreateProductA()
CreateProductB()
AbstractProductA
ProductA2
ConcreteFactory1
+
+
CreateProductA()
CreateProductB()
ProductA1
ConcreteFactory2
+
+
AbstractProductB
CreateProductA()
CreateProductB()
ProductB2
ABSTRACT FACTORY
ProductB1
6
4. Các thành phần tham gia, ý nghĩa và vai trò
AbstractFactory: Khai báo dạng interface hoặc abstract class chứa các phương
thức để tạo ra các đối tượng abstract
ConcreteFactory: Xây dựng, cài đặt các phương thức tạo các đối tượng cụ thể.
AbstractProduct: định nghĩa một lớp ảo cho một loại đối tượng “sản phẩm”
Product: kế thừa từ từ lớp "sản phẩm" ảo AbstractProduct, các lớp Product định
nghĩa từ đối tượng cụ thể.
Client: sử dụng các giao diện được khai báo bởi AbstractFactory và
AbstractProduct.
ABSTRACT FACTORY
7
5. Tính chất đặc thù
• Khơng tạo chỉ 1 đối tượng mà tạo một tập các đối
tượng liên quan (tạo ra một Factory con khác)
• Phương thức tạo đối tượng (CreateObject()) không
phụ thuộc vào yếu tố đầu vào.
ABSTRACT FACTORY
8
6. Tình huống áp dụng và các hệ quả
• Tình huống áp dụng
Một hệ thống nên được độc lập với sản phẩm của nó được tạo ra,
sáng tác, và biểu diễn.
Một hệ thống nên được cấu hình với một trong nhiều dòng sản phẩm.
Một họ của các đối tượng sản phẩm liên quan được thiết kế để được
sử dụng cùng nhau, và bạn cần phải thực thi các hạn chế này.
Bạn muốn cung cấp một thư viện lớp của sản phẩm, và bạn chỉ muốn
để lộ giao diện, khơng để lộ triển khai của họ.
• Hệ quả
Nó tách biệt các lớp cụ thể.
Nó làm cho việc trao đổi các nhóm Product dễ dàng.
Nó thúc đẩy sự thống nhất giữa các Product.
Hỗ trợ các loại Product mới là rất khó.
ABSTRACT FACTORY
9
7. Ưu và khuyết điểm của Abstract Factory
• Ưu điểm:
– Phát triển thực thi một cách độc lập với các phần cịn lại của ứng dụng thơng
qua giao diện chung.
– Thúc đẩy sự thống nhất giữa các “sản phẩm”.
• Khuyết điểm:
– Khó dự đốn những vấn đề phát sinh trong tương lai.
– Nếu AbstractProduct khơng đúng thì sẽ sinh ra các ConcreteProduct khơng
theo ý muốn.
– Rất khó để hỗ trợ một loại “sản phẩm” mới.
ABSTRACT FACTORY
10
8. Các mẫu liên quan
• Factory Method : sử dụng trong AbstractFactory
class OOSD
class OOSD
AbstractFactory
+
+
Client
CreateProductA()
CreateProductB()
Product
Creator
AbstractProductA
+
+
AnOperation()
FactoryMethod()
ProductA2
ConcreteFactory1
+
+
ProductA1
ConcreteFactory2
ConcreteProduct
CreateProductA()
+ CreateProductA()
CreateProductB()
+ CreateProductB()
«instantiate»
AbstractProductB
ConcreteCreator
+
FactoryMethod()
return new
ConcreteProduct
ProductB2
ABSTRACT FACTORY
ProductB1
11
8. Các mẫu liên quan
• Singleton : thường sử dụng trong ConcreteFactory.
class OOSD
class OOSD
AbstractFactory
+
+
Client
CreateProductA()
CreateProductB()
AbstractProductA
Singleton
ConcreteFactory1
+
+
CreateProductA()
CreateProductB()
singletonData
uniqueInstanceProductA2
ProductA1
+ GetSingletonData() AbstractProductB
CreateProductA()
+CreateProductB()
Instance()
return uniqueInstance
+ SingletonOperation()
ConcreteFactory2
+
+
ProductB2
ABSTRACT FACTORY
ProductB1
12
8. Các mẫu liên quan
• Prototype : sử dụng trong AbstractProduct.
class OOSD
class OOSD
AbstractFactory
+
+
Client
CreateProductA()
CreateProductB()
Client
-prototype
+ Operation()
p=
prototype->Clone()
Prototype AbstractProductA
+ Clone()
ProductA2
ConcreteFactory1
+
+
CreateProductA()
CreateProductB()
ProductA1
ConcreteFactory2
+
+
AbstractProductB
CreateProductA()
CreateProductB()
ConcretePrototype1
ConcretePrototype2
+ Clone()
return copy of ProductB2
self
+ Clone()
ProductB1
return
copy of
self
ABSTRACT FACTORY
13
9. Demo
Canivore
Herbervore
Plant
Canivore
ABSTRACT FACTORY
Herbervore
Plant
14
class OOSD
UML
ContinentFactory
+
+
+
CreateCarnivore(): Carnivore
CreateHerbivore(): Herbivore
CreatePlant(): Plant
AfricaFactory
+
+
+
AnimalWorld
CreateCarnivore(): Carnivore
CreateHerbivore(): Herbivore
CreatePlant(): Plant
+
+
-
_carnivore: string = ""
_herbivore: string = ""
carnivore: Carnivore
herbivore: Herbivore
plant: Plant
+
+
AnimalWorld(ContinentFactory)
RunFoodChain(): void
AmericaFactory
+
+
+
CreateCarnivore(): Carnivore
CreateHerbivore(): Herbivore
CreatePlant(): Plant
Wolf
+
-herbivore
-plant
+
Grass
-carnivore
Herbivore
Plant
+
Eat(Plant): string
ABSTRACT FACTORY
Carnivore
Eat(Plant): string
Bison
Tree
Eat(Herbivore): string
+
Lion
Wildebeest
+
Eat(Plant): string
Eat(Herbivore): string
+
Eat(Herbivore): string
15
THANK YOU FOR YOU ATTENTION
ABSTRACT FACTORY