设计模式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;
}
#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;
}
相关文章推荐
- Android状态栏(二):获得StatusBar的高度
- C语言之#define用法
- 网站优化应重视 DNS 预获取(DNS Prefetching)
- JavaAPI---5.2: SqlSessions
- Hadoop上路_14-Hadoop2.3.0的分布式集群搭建
- js 页面 eval()转化json对象
- grep 常用
- man virt-install文档
- 使用 ROW_NUMBER OVER() 删除相同记录
- 自己做的跟别人的对比一下
- ThreadLocal
- 实现交叉编译gdb和gdbserver(gdb-7.6)
- 第二周作业
- PHP 冒泡算法示例
- 勘探院读取监控数据代码设计
- Oracle 11g R2 RAC Windows 2008安装笔记
- linux命令
- CareerCup How would you implement a secondary sorting
- INI文件的读取
- Building the Testing Pipeline