Báo cáo cuối kỳ môn Lập trình hướng đối tượng - Chủ đề: Factory method design pattern - Trương Trọng Hiếu

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN – ĐHQG-HCM  
KHOA CÔNG NGHỆ THÔNG TIN  
MÔN PHƯƠNG PHÁP LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG  
BÁO CÁO CUỐI KÌ  
CHỦ ĐỀ  
FACTORY METHOD DESIGN PATTERN  
GVHD: THẦY HỒ TUẤN THANH  
NHÓM: JAVASCRIPT  
LỚP:  
17CL  
Thành viên nhóm  
MSSV  
Tên thành viên  
1760067  
1760327  
1760334  
1760336  
Trương Trọng Hiếu  
Trần Tuấn Huy  
Trần Quốc Khánh  
Ngô Hữu Anh Khoa  
Trang 2  
I.  
Đặt vấn đề  
Giả sử, khách hàng của bạn đang muốn viết một chương trình quản lí nông trại và cần  
bạn cung cấp thư viện các con vật để quản lí.  
Cách giải quyết thông thường  
#include <iostream>  
using namespace std;  
//Library classes  
class Animal {  
public:  
virtual void sound() = 0;  
};  
class Dog: public Animal {  
public:  
void sound() {  
cout << "woof woof" << endl;  
}
};  
class Cat: public Animal {  
public:  
void sound() {  
cout << "meow meow" << endl;  
}
};  
// Client class  
class MyPet{  
private:  
string petOwnerName;  
Animal* pet;  
public:  
MyPet(int typeOfPet) {  
if(typeOfPet == 1) {  
pet = new Dog();  
}
else if(typeOfPet == 2) {  
pet = new Cat();  
}
}
void setPetOwnerName(string name){  
petOwnerName = name;  
Trang 3  
}
Animal* getPet() {  
return pet;  
}
};  
int main() {  
MyPet* myCat = new MyPet(2);  
myCat->getPet()->sound();  
return 0;  
}
Cách giải quyết vấn đề ban đầu là áp dụng phương pháp lập trình hướng đối tượng. Tạo  
2 lớp Cat và Dog kế thừa lớp chung Animal. Lớp MyPet của người dùng sử dụng phương thức  
tạo lập 1 tham số truyền vào là loại của con vật muốn tạo.  
Khi người dùng muốn có thêm nhiều con vật khác nhau, ví dụ Pig. Lúc này, ta sẽ bổ sung  
thêm lớp Pig vào thư viện. Đồng thời, người dùng thư viện sẽ phải thêm điều kiện vào phương  
thức tạo lập của lớp MyPet.  
MyPet(int typeOfPet) {  
if(typeOfPet == 1) {  
pet = new Dog();  
}
else if(typeOfPet == 2) {  
pet = new Cat();  
}
else if(typeOfPet == 3) {  
pet = new Pig();  
}
}
Nhược điểm của cách làm trên: với mỗi lần cập nhật của thư viện, khách hàng phải  
sửa lại chương trình để phù hợp với sự thay đổi của thư viện. Điều này dẫn đến nhiều bất tiện  
cho người dùng khi phải liên tục biên dịch lại mã nguồn và nhiều vấn đề khác. Để giải quyết,  
ta dùng Factory Method.  
Trang 4  
II. Factory Method:  
1. Định nghĩa:  
- Factory Method là một phương thức tạo lập đối tượng (creational design pattern).  
- Trong Factory Method, chúng ta tạo đối tượng mà không để lộ phương pháp tạo đối  
tượng cho người dùng và người dùng sẽ sử dụng một phương thức tạo của thư viện  
để tạo đối tượng.  
2. Cấu trúc:  
- Sử dụng một phương thức tĩnh gọi là Static Factory Method. Phương thức này trả về  
thực thể của đối tượng. Phương thức thường có tên là create(), createProduct() hoặc  
createInstance(). Phương thức này có một tham số để nhận biết dạng đối tượng cần tạo  
và trả về đối tượng này.  
3. Ứng dụng factory method để giải quyết bài toán trên:  
Trang 5  
#include <iostream>  
using namespace std;  
// Library class  
class Animal {  
public:  
virtual void sound() = 0;  
static Animal* create(int type);  
};  
class Dog: public Animal {  
public:  
void sound() {  
cout << "woof woof" << endl;  
}
};  
class Cat: public Animal {  
public:  
void sound() {  
cout << "meow meow" << endl;  
Trang 6  
}
};  
class Pig: public Animal {  
public:  
void sound() {  
cout << "oink oink" << endl;  
}
}
// Factory Method  
Animal* Animal::create(int typeOfAnimal)  
{
if(typeOfAnimal == 1) {  
return new Dog();  
}
else if(typeOfAnimal == 2) {  
return new Cat();  
}
else if(typeOfAnimal == 3) {  
return new Pig();  
}
return NULL;  
}
// Client class  
class MyPet {  
private:  
Animal* pet;  
public:  
MyPet(int typeOfPet) {  
pet = Animal::create(typeOfPet);  
}
Animal* getPet() {  
return pet;  
}
};  
int main() {  
MyPet* myCat = new MyPet(2);  
Trang 7  
myCat->getPet()->sound();  
return 0;  
}
4. Vấn đề được giải quyết, ưu điểm của cách làm trên:  
Chúng ta tách hoàn toàn việc lựa chọn loại đối tượng từ người sử dụng thư viện.  
Thay vào đó, thư viện sẽ thực hiện các thao tác khởi tạo dựa vào tham số người dùng  
truyền vào. Như vậy, với các cập nhật của thư viện, người dùng không cần biên dịch lại  
mã nguồn, giải quyết các bất tiện trong việc khởi tạo đối tượng theo cách giải quyết  
thông thường.  
5. Các bài toán sử dụng pattern này:  
6. Tổng kết:  
Factory method rất hữu dụng trong việc tạo ra các đối tượng động, ứng dụng sẽ  
mềm dẻo hơn với việc áp dụng Factory Method. Nó như là một phương thức tảo lập ảo  
cho chương trình (virtual constructor) của bạn. Nếu bạn có nhiều đối tượng thuộc cùng  
một kiểu cơ sở và cần tách biệt phần tạo lập của chúng với người dùng, thì lúc này chúng  
ta sẽ thực sự cần đến Factory method. Hãy nhớ áp dụng Factory Method một cách linh  
hoạt và hiệu quả. Đây chính là một trong các loại “công cụ” của lập trình viên - Factory  
Method.  
HẾT  
Trang 8  
docx 8 trang myanh 29960 Free
Bạn đang xem tài liệu "Báo cáo cuối kỳ môn Lập trình hướng đối tượng - Chủ đề: Factory method design pattern - Trương Trọng Hiếu", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • docxbao_cao_mon_lap_trinh_huong_doi_tuong_chu_de_factory_method.docx
  • docxBT1.docx
  • docxBT2.docx
  • docxBT3.docx
  • docxBT4.docx
  • pptxSlide.pptx