架構師訓練營第 1 期 - 第 03 周作業
发布于: 2020 年 10 月 04 日
1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
class Singleton {public: static Singleton& getInstance() { static Singleton instance; return instance; } void show(){ std::cout << "Singleton\n"; }private: Singleton() = default; ~Singleton() = default; Singleton(const Singleton& instance) = delete; Singleton& operator=(const Singleton& instance) = delete;};
2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。

圖2 窗口組件數結構與圖3程序輸出示例中,"記住用戶名"的部分不一致
圖2 為 Label
圖3 卻顯示為 TextBox
參考圖1的圖例,決定採用圖2的 Label 組件
#include <iostream>#include <vector>class Component {public: Component(const std::string& name): _name(name){}; virtual void draw() = 0; virtual ~Component() = default;protected: std::string _name;};class Container : public Component {public: Container(const std::string& name): Component(name){}; void addComponent(Component& com) {_comList.push_back(&com);}; virtual void draw(); ~Container() = default;private: std::vector<Component*> _comList;};void Container::draw() { for (auto& item : _comList) { item->draw(); }}class WinForm : public Container{public: WinForm(const std::string name): Container(name){}; virtual void draw(); ~WinForm() = default;};void WinForm::draw() { std::cout << "WinForm (" << _name << ")\n"; Container::draw();}class Frame : public Container{public: Frame(const std::string name): Container(name){}; virtual void draw(); ~Frame() = default;};void Frame::draw() { std::cout << "Frame (" << _name << ")\n"; Container::draw();}class Picture : public Component {public: Picture(const std::string& name) : Component(name){}; virtual void draw() {std::cout << "Picture (" << _name << ")\n";}; ~Picture() = default;};class Button : public Component {public: Button(const std::string& name) : Component(name){}; virtual void draw() {std::cout << "Button (" << _name << ")\n";}; ~Button() = default;};class Label : public Component {public: Label(const std::string& name) : Component(name){}; virtual void draw() {std::cout << "Label (" << _name << ")\n";}; ~Label() = default;};class LinkLabel : public Component {public: LinkLabel(const std::string& name) : Component(name){}; virtual void draw() {std::cout << "LinkLabel (" << _name << ")\n";}; ~LinkLabel() = default;};class TextBox : public Component {public: TextBox(const std::string& name) : Component(name){}; virtual void draw() {std::cout << "TextBox (" << _name << ")\n";}; ~TextBox() = default;};class PasswordBox : public Component {public: PasswordBox(const std::string& name) : Component(name){}; virtual void draw() {std::cout << "PasswordBox (" << _name << ")\n";}; ~PasswordBox() = default;};class CheckBox : public Component {public: CheckBox(const std::string& name) : Component(name){}; virtual void draw() {std::cout << "CheckBox (" << _name << ")\n";}; ~CheckBox() = default;};int main(){ WinForm win = WinForm("Window窗口"); Picture pic = Picture("Logo圖片"); Button btn1 = Button("登錄"); Button btn2 = Button("註冊"); Frame frame = Frame("Frame1"); Label label1 = Label("用戶名"); TextBox textB1 = TextBox("文本框"); Label label2 = Label("密碼"); PasswordBox passB = PasswordBox("密碼框"); CheckBox checkB = CheckBox("複選框"); Label label3 = Label("記住用戶名"); LinkLabel link = LinkLabel("忘記密碼"); win.addComponent(pic); win.addComponent(btn1); win.addComponent(btn2); win.addComponent(frame); frame.addComponent(label1); frame.addComponent(textB1); frame.addComponent(label2); frame.addComponent(passB); frame.addComponent(checkB); frame.addComponent(label3); frame.addComponent(link); win.draw();}
划线
评论
复制
发布于: 2020 年 10 月 04 日阅读数: 34
版权声明: 本文为 InfoQ 作者【Panda】的原创文章。
原文链接:【http://xie.infoq.cn/article/1c50ae5a47b43915723872860】。未经作者许可,禁止转载。

Panda
关注
还未添加个人签名 2015.06.29 加入
还未添加个人简介
评论