写点什么

单例模式 & 组合模式

用户头像
朱月俊
关注
发布于: 2020 年 06 月 23 日
单例模式 & 组合模式

1.单例模式

主要点就是加了一个volatile特性。

2.组合模式

数据结构部分:

  • 

#include <list>
#include <string>
#include <algorithm>

using namespace std;

class Component {
public:
virtual void process() = 0;
virtual ~Component(){}
};

// tree node
class Composite : public Component {
private:
string name;
list<Component*> elements;
public:
Composite(const string& s) : name(s) {}
void add(Component* element) {
this->elements.push_back(element);
}
void remove(Component* element) {
this->elements.remove(element);
}
void process() {
cout << (this->name) << endl;
for (auto& e : elements) {
e->process();
}
}
};

// leaf node
class Leaf : public Component {
private:
string name;
public:
Leaf(string s) : name(s) {}
void process() {
cout << this->name << endl;
}
};

int main() {
Composite root("WinForm(WINDOW窗口)");
Composite frame("Frame(FRAME1)");

Leaf login("Button(登录)");
Leaf reg("Button(注册)");
Leaf logo("Picture(LOGO图片)");
Leaf user("Label(用户名)");
Leaf userTextBox("TextBox(文本框)");
Leaf passwd("Label(密码)");
Leaf passwdBox("PasswdBox(密码框)");
Leaf checkBox("CheckBox(复选框)");
Leaf textBox("TextBox(记住用户名)");
Leaf linkLabel("LinkLabel(忘记密码)");
root.add(&logo);
root.add(&frame);
root.add(&login);
root.add(&reg);
frame.add(&user);
frame.add(&userTextBox);
frame.add(&passwd);
frame.add(&passwdBox);
frame.add(&checkBox);
frame.add(&textBox);
frame.add(&linkLabel);

root.process();
}


g++ 1.cc -std=c++11

./a.out,结果如下图:



发布于: 2020 年 06 月 23 日阅读数: 52
用户头像

朱月俊

关注

还未添加个人签名 2017.11.06 加入

还未添加个人简介

评论

发布
暂无评论
单例模式 & 组合模式