根本没有正确的选择,我们只有靠奋斗来使当初的选择显得正确。
—— 一个有思考的程序员
单例模式是在程序运行的整个生命周期,该类只有一个实例,这样可以确保任何的引用处得到的数据都是一致的。 比如,一个人力资源管理类,在某一个时刻用户在某个类中点击了就添加一个人员,在某一个时刻用户在另一个类中点击了按钮要查看人员,这时候不管何时,人力资源类都要保持数据统一
#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; }
#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; // 结果为: }
# 加粗 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>