写点什么

架构师训练营 - 第 03 周作业提交

用户头像
Eric
关注
发布于: 2020 年 06 月 21 日

1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。


2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。

/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          form.h
复制代码


**  \brief:         Form
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include <string>
复制代码


class Form
复制代码


{
复制代码


public:
复制代码


    Form(std::string label);
复制代码


    virtual ~Form();
复制代码


    virtual void Print() = 0;
复制代码


protected:
复制代码


    void DoPrint(std::string class_name);
复制代码


    std::string Label();
复制代码


    std::string label_;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          form.cpp
复制代码


**  \brief:         Form
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "form.h"
复制代码


#include <iostream>
复制代码


Form::Form(std::string label)
复制代码


    : label_(label)
复制代码


{
复制代码


}
复制代码


Form::~Form()
复制代码


{
复制代码


}
复制代码


void Form::DoPrint(std::string class_name)
复制代码


{
复制代码


    std::cout << "print " + class_name + "(" + Label() + ")" << std::endl;
复制代码


}
复制代码


std::string Form::Label()
复制代码


{
复制代码


    return label_;
复制代码


}
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          containerform.h
复制代码


**  \brief:         ContainerForm
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include "form.h"
复制代码


#include <vector>
复制代码


class ContainerForm : public Form
复制代码


{
复制代码


public:
复制代码


    ContainerForm(std::string label);
复制代码


    virtual ~ContainerForm();
复制代码


    // Form interface
复制代码


public:
复制代码


    virtual void Print() override = 0;
复制代码


    virtual void AddChild(Form* child);
复制代码


protected:
复制代码


    std::vector<Form* > childs_;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          containerform.cpp
复制代码


**  \brief:         ContainerForm
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "containerform.h"
复制代码


ContainerForm::ContainerForm(std::string label)
复制代码


    : Form(label)
复制代码


{
复制代码


}
复制代码


ContainerForm::~ContainerForm()
复制代码


{
复制代码


    for (int i = 0; i < childs_.size(); ++i) {
复制代码


        delete childs_[i];
复制代码


    }
复制代码


}
复制代码


void ContainerForm::AddChild(Form *child)
复制代码


{
复制代码


    childs_.push_back(child);
复制代码


}
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          winform.h
复制代码


**  \brief:         WinForm
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include "containerform.h"
复制代码


class WinForm : public ContainerForm
复制代码


{
复制代码


public:
复制代码


    WinForm(std::string label);
复制代码


    // Form interface
复制代码


public:
复制代码


    virtual void Print() override;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          winform.cpp
复制代码


**  \brief:         WinForm
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "winform.h"
复制代码


#include <iostream>
复制代码


WinForm::WinForm(std::string label)
复制代码


    : ContainerForm(label)
复制代码


{
复制代码


}
复制代码


void WinForm::Print()
复制代码


{
复制代码


    DoPrint("WinForm");
复制代码


    for (int i = 0; i < childs_.size(); ++i) {
复制代码


        childs_[i]->Print();
复制代码


    }
复制代码


}
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          frame.h
复制代码


**  \brief:         Frame
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include "containerform.h"
复制代码


class Frame : public ContainerForm
复制代码


{
复制代码


public:
复制代码


    Frame(std::string label);
复制代码


    // Form interface
复制代码


public:
复制代码


    virtual void Print() override;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          frame.cpp
复制代码


**  \brief:         Frame
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "frame.h"
复制代码


Frame::Frame(std::string label)
复制代码


    : ContainerForm(label)
复制代码


{
复制代码


}
复制代码


void Frame::Print()
复制代码


{
复制代码


    DoPrint("Frame");
复制代码


    for (int i = 0; i < childs_.size(); ++i) {
复制代码


        childs_[i]->Print();
复制代码


    }
复制代码


}
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          button.h
复制代码


**  \brief:         Button
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include "form.h"
复制代码


class Button : public Form
复制代码


{
复制代码


public:
复制代码


    Button(std::string label);
复制代码


    // Form interface
复制代码


public:
复制代码


    virtual void Print() override;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          button.cpp
复制代码


**  \brief:         Button
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "button.h"
复制代码


Button::Button(std::string label)
复制代码


    : Form(label)
复制代码


{
复制代码


}
复制代码


void Button::Print()
复制代码


{
复制代码


    DoPrint("Button");
复制代码


}
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          checkbox.h
复制代码


**  \brief:         CheckBox
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include "form.h"
复制代码


class CheckBox : public Form
复制代码


{
复制代码


public:
复制代码


    CheckBox(std::string label);
复制代码


    // Form interface
复制代码


public:
复制代码


    virtual void Print() override;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          checkbox.cpp
复制代码


**  \brief:         CheckBox
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "checkbox.h"
复制代码


CheckBox::CheckBox(std::string label)
复制代码


    : Form(label)
复制代码


{
复制代码


}
复制代码


void CheckBox::Print()
复制代码


{
复制代码


    DoPrint("CheckBox");
复制代码


}
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          label.h
复制代码


**  \brief:         Label
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include "form.h"
复制代码


class Lable : public Form
复制代码


{
复制代码


public:
复制代码


    Lable(std::string label);
复制代码


    // Form interface
复制代码


public:
复制代码


    virtual void Print() override;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          label.cpp
复制代码


**  \brief:         Label
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "lable.h"
复制代码


Lable::Lable(std::string label)
复制代码


    : Form(label)
复制代码


{
复制代码


}
复制代码


void Lable::Print()
复制代码


{
复制代码


    DoPrint("Lable");
复制代码


}
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          linklable.h
复制代码


**  \brief:         LinkLable
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include "form.h"
复制代码


class LinkLable : public Form
复制代码


{
复制代码


public:
复制代码


    LinkLable(std::string label);
复制代码


    // Form interface
复制代码


public:
复制代码


    virtual void Print() override;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          linklable.cpp
复制代码


**  \brief:         LinkLable
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "linklable.h"
复制代码


LinkLable::LinkLable(std::string label)
复制代码


    : Form(label)
复制代码


{
复制代码


}
复制代码


void LinkLable::Print()
复制代码


{
复制代码


    DoPrint("LinkLable");
复制代码


}
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          passwordbox.h
复制代码


**  \brief:         PasswordBox
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include "form.h"
复制代码


class PasswordBox : public Form
复制代码


{
复制代码


public:
复制代码


    PasswordBox(std::string label);
复制代码


    // Form interface
复制代码


public:
复制代码


    virtual void Print() override;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          passwordbox.cpp
复制代码


**  \brief:         PasswordBox
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "passwordbox.h"
复制代码


PasswordBox::PasswordBox(std::string label)
复制代码


    : Form(label)
复制代码


{
复制代码


}
复制代码


void PasswordBox::Print()
复制代码


{
复制代码


    DoPrint("PasswordBox");
复制代码


}
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          picture.h
复制代码


**  \brief:         Picture
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include "form.h"
复制代码


class Picture : public Form
复制代码


{
复制代码


public:
复制代码


    Picture(std::string label);
复制代码


    // Form interface
复制代码


public:
复制代码


    virtual void Print() override;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          picture.cpp
复制代码


**  \brief:         Picture
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "picture.h"
复制代码


#include <iostream>
复制代码


Picture::Picture(std::string label)
复制代码


    : Form(label)
复制代码


{
复制代码


}
复制代码


void Picture::Print()
复制代码


{
复制代码


    DoPrint("Picture");
复制代码


}
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          textbox.h
复制代码


**  \brief:         TextBox
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#pragma once
复制代码


#include "form.h"
复制代码


class TextBox : public Form
复制代码


{
复制代码


public:
复制代码


    TextBox(std::string label);
复制代码


    // Form interface
复制代码


public:
复制代码


    virtual void Print() override;
复制代码


};
复制代码


/**********************************************************************************************//**
复制代码


**  \copyright:     Copyright (C) 2020 The Radiofrog Company Ltd.
复制代码


**  \file:          textbox.cpp
复制代码


**  \brief:         TextBox
复制代码


**  \author:        rui <rui@radiofrog.com>
复制代码


**  \date:          2020/6/21
复制代码


**  \description:
复制代码


**************************************************************************************************/
复制代码


#include "textbox.h"
复制代码


TextBox::TextBox(std::string label)
复制代码


    : Form(label)
复制代码


{
复制代码


}
复制代码


void TextBox::Print()
复制代码


{
复制代码


    DoPrint("TextBox");
复制代码


}
复制代码


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

Eric

关注

还未添加个人签名 2018.04.19 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
代码建议都贴在一个框里,比较方便阅读
2020 年 06 月 28 日 17:35
回复
没有更多了
架构师训练营-第 03 周作业提交