根本没有正确的选择,我们只有靠奋斗来使当初的选择显得正确。

—— 一个有思考的程序员

【单例模式】
单例模式是在程序运行的整个生命周期,该类只有一个实例,这样可以确保任何的引用处得到的数据都是一致的。
比如,一个人力资源管理类,在某一个时刻用户在某个类中点击了就添加一个人员,在某一个时刻用户在另一个类中点击了按钮要查看人员,这时候不管何时,人力资源类都要保持数据统一

#include <iostrem>

class A
{
public:
    void addPerson(const std::string& name)
    {
        m_persons.push_back(name);
    }

    std::vector<std::string> getPersons()
    {
        return m_persons;
    }

private:
    std::vector<std::string> m_persons;
}

class B
{
public:
    void clickButtonToAddPerson(const std::string& name)
    {
        A::GetInstance().addPerson(name);
    }

private:
    A m_a;
}

class C
{
    public:
    void clickButtonToShowPersons()
    {
        std::vector<std::string> persons = A::GetInstance().getPersons();
        for (const auto& person : persons)
        {
            std::cout << person << std::endl;
        }
    }
private:
    A m_a;
}

int main(void)
{
    B b;
    b.clkckButtonToAddPerson("caoyanjie");

    C c;
    c.clickButtonToShowPersons();

    return 0;
}
  
【装饰器模式】
1. C++版
#include <iostream>
#include <string>

// 形状
struct Shape
{
    virtual std::string str() = 0;
};

// 圆
struct Circle : Shape
{
    // 重载基类虚函数
    std::string str() override
    {
        return std::string("圆的半径为:") + std::to_string(m_radius);
    }

private:
    float m_radius = 10.0f;
};

// 形状颜色
struct ColorShape : Shape
{
    ColorShape(std::string color, Shape* shape)
    {
        m_color = color;
        m_shape = shape;
    }

    // 重载基类虚函数
    std::string str() override
    {
        return m_shape->str() + std::string(" 颜色为:") + m_color;
    }

private:
    std::string    m_color;
    Shape*         m_shape;
};

int main()
{
    Circle c;
    ColorShape cc("红色", &c);
    std::cout << cc.str() << std::endl;   // 结果为:
}
2. Python版
# 加粗
def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

# 加斜
def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

# 加斜再加粗
@makebold
@makeitalic
def hello():
    return "hello world"

print(hello())   # 结果为: <b><i>hello world</i></b>