您的位置:首页 > 其它

设计模式Before-after之组合模式

2014-03-15 00:35 316 查看
before.cxx

#include <iostream>
#include <list>

class Element {
public:
Element(int value): value(value) {};
void remove(void) {
std::cout << this->value << " has been removed." << std::endl;
}
private:
int value;
};

class Set {
public:
void remove(void) {
for (std::list<Set *>::iterator setIterator = setList.begin(); setIterator != setList.end(); ++setIterator) {
(**setIterator).remove();
}
setList.clear();
for (std::list<Element *>::iterator elementIterator = elementList.begin(); elementIterator != elementList.end(); ++elementIterator) {
(**elementIterator).remove();
}
elementList.clear();
}
void addSet(Set &set) {
setList.push_back(&set);
}
void addElement(Element &element) {
elementList.push_back(&element);
}
private:
std::list<Set *> setList;
std::list<Element *> elementList;
};

int main(void) {
Set set1;
set1.addElement(Element(2));
set1.addElement(Element(3));
Set set2;
set2.addElement(Element(1));
set2.addSet(set1);
set2.addElement(Element(4));
set2.remove();
return 0;
}


after.cxx
#include <iostream>
#include <list>

class _Element {
public:
virtual void remove(void) = 0;
};

class Element: public _Element {
public:
Element(int value): value(value) {};
void remove(void) {
std::cout << this->value << " has been removed." << std::endl;
}
private:
int value;
};

class Set: public _Element {
public:
void remo
4000
ve(void) {
for (std::list<_Element *>::iterator elementIterator = elementList.begin(); elementIterator != elementList.end(); ++elementIterator) {
(**elementIterator).remove();
}
elementList.clear();
}
void add(_Element &element) {
elementList.push_back(&element);
}
private:
std::list<_Element *> elementList;
};

int main(void) {
Set set1;
set1.add(Element(2));
set1.add(Element(3));
Set set2;
set2.add(Element(1));
set2.add(set1);
set2.add(Element(4));
set2.remove();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: