01/10/2018, 01:05
Mẫu thiết kế hướng đối tượng Conposite
Em chào các sư huynh ạ
Em đang tìm hiểu vài bài tập về mẫu thiết kế Composite.
Và có 1 bài tập sau:
cho Folder1 có 2 file abc.txt, def.txt và 1 Folder2
Trong Folder2 có 2 file abc.txt và abc.exe
Sử dụng mẫu Composite để đếm số lượng file có tên “abc.txt”
Code của em ở dưới: Và em đang bí cách giải quyết quá :’(
Sư huynh nào có thể giúp em với ạ :’(
Em xin chân thành cảm ơn.
#include <iostream>
#include <conio.h>
#include <string>
#include <vector>
using namespace std;
class Item
{
public:
string ten;
Item(string ten)
{
this -> ten = ten;
}
virtual string what() { return ""; }
};
class File : public Item
{
public:
File(string ten) : Item(ten) {}
string what()
{
return "File";
}
};
class Folder : public Item
{
protected:
vector <Item*> dsItemCon;
public:
Folder(string ten) : Item(ten) {}
string what()
{
return "Folder";
}
const int DemTep(string s) const
{
int dem = 0;
for(int i = 0; i < dsItemCon.size(); i++)
{
if(dsItemCon[i]-> ten == s && dsItemCon[i] -> what() == "File")
dem++;
}
return dem;
}
void Add(Item *item)
{
dsItemCon.push_back(item);
}
};
int main()
{
File f1("abc.txt"), f2("abc.txt"), f3("haha.exe"), f4("def.txt");
Folder folder1("Folder1"), folder2("Folder2");
folder1.Add(&folder2);
folder1.Add(&f1);
folder1.Add(&f4);
folder2.Add(&f2);
folder2.Add(&f3);
cout << "Folder 1 co " << folder1.DemTep("abc.txt") << " tep abc.txt";
getch();
return 0;
}
Bài liên quan
Vấn đề của bạn là gì? Bạn nên đặt tên method có ý nghĩa chút, what() là cái gì, thay bằng getType có phải dễ hiểu hơn không.
Ngoài ra chỉ có 2 loại là file hoặc folder thôi nên không cần thiết phải có 1 base class là item đâu, folder cũng là file mà
Hi Nguyễn Tuấn Namnguyentuannam
Đây là code của mình. Mình đang phân vân có nên cho phương thức tim vào folder không.
cảm ơn sư huynh nhiều ạ