Báo Cáo Môn Học Thiết Kế Phần Mềm Hướng Đối Tượng Đề Tài ABSTRACT FACTORYBáo Cáo Môn Học Thiết Kế Phần Mềm Hướng Đối Tượng Đề Tài ABSTRACT FACTORYBáo Cáo Môn Học Thiết Kế Phần Mềm Hướng Đối Tượng Đề Tài ABSTRACT FACTORYBáo Cáo Môn Học Thiết Kế Phần Mềm Hướng Đối Tượng Đề Tài ABSTRACT FACTORYBáo Cáo Môn Học Thiết Kế Phần Mềm Hướng Đối Tượng Đề Tài ABSTRACT FACTORY
Trang 1ABSTRACT FACTORY
Trang 2Nộ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
Trang 31 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ế
Trang 41 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”
Trang 52 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
Trang 63 Cấu trúc
class OOSD
AbstractFactory
+ CreateProductA() + CreateProductB()
ConcreteFactory1
+ CreateProductA() + CreateProductB()
ConcreteFactory2
+ CreateProductA() + CreateProductB()
AbstractProductA
AbstractProductB
Client
Trang 74 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.
Trang 85 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
Trang 96 Tình huống áp dụng và các hệ quả
• Tình huống áp dụng
sáng tác, và biểu diễn.
sử dụng cùng nhau, và bạn cần phải thực thi các hạn chế này.
để lộ giao diện, không để lộ triển khai của họ.
• Hệ quả
Trang 107 Ư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ự đoá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.
Trang 118 Các mẫu liên quan
• Factory Method : sử dụng trong AbstractFactory
class OOSD
Product
ConcreteProduct
Creator
+ AnOperation()
+ FactoryMethod()
ConcreteCreator
+ FactoryMethod()
return new ConcreteProduct
«instantiate»
class OOSD
AbstractFactory
+ CreateProductA() + CreateProductB()
ConcreteFactory1
+ CreateProductA() + CreateProductB()
ConcreteFactory2
+ CreateProductA() + CreateProductB()
AbstractProductA
AbstractProductB
Client
Trang 128 Các mẫu liên quan
• Singleton : thường sử dụng trong ConcreteFactory.
class OOSD
Singleton
- singletonData
- uniqueInstance
+ GetSingletonData() + Instance()
return uniqueInstance
+ SingletonOperation()
class OOSD
AbstractFactory
+ CreateProductA() + CreateProductB()
ConcreteFactory1
+ CreateProductA() + CreateProductB()
ConcreteFactory2
+ CreateProductA() + CreateProductB()
AbstractProductA
ProductA2 ProductA1
AbstractProductB
ProductB2 ProductB1
Client
Trang 138 Các mẫu liên quan
• Prototype : sử dụng trong AbstractProduct.
class OOSD
Prototype
+ Clone()
ConcretePrototype1
+ Clone()
return copy of self
ConcretePrototype2
+ Clone()
return copy of self
Client
+ Operation()
p = prototype->Clone()
-prototype
class OOSD
AbstractFactory
+ CreateProductA() + CreateProductB()
ConcreteFactory1
+ CreateProductA() + CreateProductB()
ConcreteFactory2
+ CreateProductA() + CreateProductB()
AbstractProductA
ProductA2 ProductA1
AbstractProductB
ProductB2 ProductB1
Client
Trang 149 Demo
Herbervore Canivore Plant Canivore Herbervore Plant
Trang 15class OOSD
AfricaFactory
+ CreateCarnivore(): Carnivore + CreateHerbivore(): Herbivore + CreatePlant(): Plant
AmericaFactory
+ CreateCarnivore(): Carnivore + CreateHerbivore(): Herbivore + CreatePlant(): Plant
AnimalWorld
+ _carnivore: string = ""
+ _herbivore: string = ""
- carnivore: Carnivore
- herbivore: Herbivore
- plant: Plant + AnimalWorld(ContinentFactory) + RunFoodChain(): void
Bison
+ Eat(Plant): string
Carnivore
+ Eat(Herbivore): string
ContinentFactory
+ CreateCarnivore(): Carnivore + CreateHerbivore(): Herbivore + CreatePlant(): Plant
Grass
Herbivore
+ Eat(Plant): string
Lion
+ Eat(Herbivore): string
Plant
+ Eat(Plant): string
Wolf
+ Eat(Herbivore): string
Trang 16THANK YOU FOR YOU ATTENTION