Tải bản đầy đủ (.pptx) (16 trang)

Báo Cáo Môn Học - Thiết Kế Phần Mềm Hướng Đối Tượng - Đề Tài - ABSTRACT FACTORY

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (435.14 KB, 16 trang )

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



×